从推送通知打开应用程序时是不是调用了 didFinishLaunchingWithOptions

Posted

技术标签:

【中文标题】从推送通知打开应用程序时是不是调用了 didFinishLaunchingWithOptions【英文标题】:Is didFinishLaunchingWithOptions called when app opens from push notification从推送通知打开应用程序时是否调用了 didFinishLaunchingWithOptions 【发布时间】:2016-01-20 05:54:01 【问题描述】:

我已经从后台杀死了该应用程序。杀死应用程序后,我发送一个推送通知。我对将被调用的AppDelegate 函数有两个疑问:1didFinishLaunchingWithOptions 会被调用吗?2。如果是,将首先调用didFinishLaunchingWithOptions 还是首先调用didReceiveRemoteNotification

我无法测试这个场景,因为它无法调试,应用程序从推送通知打开的事实。

【问题讨论】:

【参考方案1】:

如果您的应用程序处于后台模式,则永远不会调用 didFinishLaunchingWithOptions 方法,而只会调用 didReceiveRemoteNotification 方法

并且如果你的应用程序被杀死只有didFinishLaunchingWithOptions方法被调用didReceiveRemoteNotification方法永远不会被调用。

【讨论】:

好吧,当应用程序被杀死时,didReceiveRemoteNotification 中的代码会在收到推送通知时执行。 如果没有调用didReceiveRemoteNotification,如何识别pp是从推送通知中打开的?【参考方案2】:

我已经从后台杀死了该应用程序。

我猜您是想说您已从托盘中删除了该应用。如果是这样,

    是的,在这种情况下它会被调用。 didReceiveRemoteNotification此时不会打电话。只有当您的应用在后台运行时,它才会被调用。

【讨论】:

好吧,当应用程序被杀死时,didReceiveRemoteNotification 中的代码会在收到推送通知时执行。 如果没有调用didReceiveRemoteNotification,如何识别pp是从推送通知中打开的? 是的,你可以这样检查,- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions if (launchOptions != nil) // Launched from push notification NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

以上是关于从推送通知打开应用程序时是不是调用了 didFinishLaunchingWithOptions的主要内容,如果未能解决你的问题,请参考以下文章

检测应用程序是不是从推送通知启动/打开,然后将其重定向到特定视图控制器

检测应用程序是不是从后台 Swift iOS 打开

当我管理推送通知时如何知道我的应用程序是不是打开

打开另一个特定应用程序 (Facebook) 时可以从我的应用程序发送推送通知吗?

关闭应用程序时如何避免处理来自 GCM 的推送通知

检查用户是不是打开了推送通知