gpt4 book ai didi

iOS 推送通知和 AppDelegate 方法行为

转载 作者:可可西里 更新时间:2023-11-01 03:39:37 28 4
gpt4 key购买 nike

我对许多 stackoverflow 问题和网站进行了一些研究,试图弄清楚 iOS 推送通知如何影响 AppDelegate生命周期方法以及何时触发(不)哪个方法。研究的主要重点是“标准”iOS 推送通知(带有 alert 字段)和静默通知(仅 content-available 设置为 1)和 AppDelegate 的 application:didReceiveRemoteNotificationapplication:didFinishLaunchingWithOptions方法。

我不想针对不同的场景提出很多问题,而是想尝试写下我尝试过的不同测试用例的陈述,然后再问你:
Is there any statement that is wrong and if yes, which one and why?
场景1:应用程序已被使用并通过点击主页按钮进入后台。

  • 如果发送标准推送通知,则在推送通知到达的那一刻,不会触发任何方法,应用程序在后台保持非事件状态。一旦点击推送通知并因此打开应用程序,application:didReceiveRemoteNotification方法被调用,application:didFinishLaunchingWithOptions没有被调用。我在将应用程序置于后台以及应用程序在后台运行一个多小时后立即测试了这种情况 - 相同的行为。我想如果由于某种原因 iOS 决定在后台杀死我的应用程序,这个测试用例就会变成场景 2,下面的语句 1,对吧?
  • 如果发送静默推送通知,则在推送通知到达的那一刻,application:didReceiveRemoteNotification方法被调用,application:didFinishLaunchingWithOptions没有被调用。


  • 场景 2:应用程序已被使用并通过将其从正在运行的应用程序列表中滑出而被杀死。
  • 如果发送标准推送通知,则在推送通知到达的那一刻,没有任何方法被触发,应用程序保持被杀死。一旦点击推送通知并因此打开应用程序,application:didReceiveRemoteNotification方法被调用,application:didFinishLaunchingWithOptions没有被调用。
  • 如果发送静默推送通知,则不会触发任何方法,因为静默推送通知无法发送到被杀死的应用程序。发送通知后打开应用程序后,application:didFinishLaunchingWithOptions作为正常流程的一部分被调用,并且没有任何推送通知信息。 application:didReceiveRemoteNotification没有被调用。


  • 如果您能想到我可能忘记提及的其他一些现实生活场景,我将非常感谢您了解它们以及在这些情况下会发生什么。

    干杯

    更新#1

    感谢 Sandeep Bhandari 的更新和其他场景。我忘了在我原来的问题中提到我正在探索应用程序到达当前 not 的应用程序的场景。无论出于何种原因在前台。

    将 Sandeep 的场景添加到列表中:

    场景 3:正在使用应用程序并且推送通知到达。
  • 如果发送标准推送通知 application:didReceiveRemoteNotification方法将被调用。 application:didFinishLaunchingWithOptions不会被调用。
  • 如果发送静默推送通知 application:didReceiveRemoteNotification方法将被调用。 application:didFinishLaunchingWithOptions不会被调用。


  • 场景 4:应用程序在后台运行。
  • 如果发送标准推送通知 application:didReceiveRemoteNotification方法将被调用。 application:didFinishLaunchingWithOptions不会被调用。
  • 如果发送静默推送通知 application:didReceiveRemoteNotification方法将被调用。 application:didFinishLaunchingWithOptions不会被调用。
  • 最佳答案

    From an experience and digging alot on the iOS push notification. App being in foreground or alive in background. both situations triggers same delegate methods. only didReceiveRemoteNotification.



    静默推送通知有不同的处理程序:(内容可用 1 表示静默通知)
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    }

    当应用程序死了。 didReceiveRemoteNotification从未要求定期推送通知。必须在 didFinishLaunchingWithOptions处理如下:
    // handle notification when app is closed.
    let notification = launchOptions?[.remoteNotification]
    if notification != nil {
    self.application(application, didReceiveRemoteNotification: notification as! [AnyHashable : Any])
    }

    附加信息:

    在应用程序被杀死时测试接收推送通知。从双击主页按钮时出现的列表中删除?

    查看日志和进行调试的正确方法是编辑运行方案并选择 。等待可执行文件启动 :

    enter image description here

    从 xcode 运行应用程序。然后从服务器发送推送通知,然后点击通知中心的通知。

    关于iOS 推送通知和 AppDelegate 方法行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42442833/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com