如果应用程序直接从后台启动而不是从通知消息启动,如何知道推送消息信息?

How to know a push message info if app is launched from background directly rather than from notification msg?

我已正确注册推送通知。 实现了以下方法来接收通知。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])

还使用了 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool 中的 UIApplicationLaunchOptionsRemoteNotificationKey

当应用程序处于活动状态时,我能够收到通知。如果我通过从横幅或警报中选择应用程序从通知中打开应用程序,我也可以看到通知。

但是,如果应用程序未处于活动状态,则它可能处于活动状态或已被终止,并且如果此时收到通知。我忽略通知并通过直接从主屏幕选择应用程序图标打开应用程序,我没有从 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool.

中获取 UIApplicationLaunchOptionsRemoteNotificationKey 中的通知信息

那么处理这种情况的正确方法是什么?应用程序是否应该调用服务器并获取它发送的最近消息?非常感谢任何帮助。

如果用户直接从主屏幕打开您的应用,您将无法访问推送通知字典。

如果您需要推送通知中发送的数据,那么正确的方法将是您建议的服务器请求。

如果用户通过点击图标进入应用程序或从后台启动,推送通知消息无法发送给您,消息被系统缓存,只能从通知中心获取

回答我的问题:

后台应用可能会收到推送通知。

为此,在推送通知的 aps 词典中发送 content-available。 从 Xcode 项目的功能选项卡的后台模式部分启用应用程序的后台模式。 在应用程序委托中实现 application:didReceiveRemoteNotification:fetchCompletionHandler:

参考资料: 请参阅 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

中的 'Notification Payload' 部分

请参阅第 'Using Push Notifications to Initiate a Download' 部分 https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

但是,如果应用程序被终止,则不会调用 appdelegate 的 application:didReceiveRemoteNotification:fetchCompletionHandler:

根据 iOS8.0 上的 Will iOS launch my app into the background if it was force-quit by the user? post,可以使用 PushKit 来完成。但我没有测试过。而且如果不使用VOIP那么我不知道如果应用程序被杀死是否有可能接收推送通知信息。