如果app直接从后台启动而不是通知msg,如何知道推送消息信息?

时间:2015-04-13 21:19:06

标签: ios swift ios8 push-notification appdelegate

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

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

还使用了来自UIApplicationLaunchOptionsRemoteNotificationKey的{​​{1}}。

我可以在应用处于活动状态时收到通知。如果我从通知中打开应用程序,我也可以看到通知,方法是从横幅或警报中选择它。

但是如果app不活跃,它可能会活着或被杀死,如果通知到达那一点。我忽略了通知并通过直接从主屏幕选择应用图标来打开应用,我没有从func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool UIApplicationLaunchOptionsRemoteNotificationKey获取通知信息。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果用户通过点击图标进入应用程序或从后台启动,推送通知消息无法传递给您,消息将由系统缓存,获取它的唯一方法是来自通知中心

答案 2 :(得分:0)

回答我的问题:

后台应用可以接收推送通知。

为此,请在content-available推送通知字典中发送aps。 从Xcode项目的Capabilities选项卡的Background modes部分启用应用程序的后台模式。 在应用代理中实施application:didReceiveRemoteNotification:fetchCompletionHandler:

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

中的“通知有效负载”部分

请参阅“使用推送通知启动下载”部分 https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

然而,如果app被杀死,那么appdelegate的application:didReceiveRemoteNotification:fetchCompletionHandler:就不会被调用。

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