【问题标题】:How to know a push message info if app is launched from background directly rather than from notification msg?如果应用程序直接从后台启动而不是从通知消息中启动,如何知道推送消息信息?
【发布时间】:2015-06-19 08:27:03
【问题描述】:

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

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

也使用了UIApplicationLaunchOptionsRemoteNotificationKey,来自func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool

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

但如果应用程序未处于活动状态,它可能是活动的或被终止的,并且如果通知到达那个点。而且我忽略了通知并通过直接从主屏幕选择应用程序图标打开应用程序,我没有从func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool 获取UIApplicationLaunchOptionsRemoteNotificationKey 中的通知信息。

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

【问题讨论】:

    标签: ios swift ios8 push-notification appdelegate


    【解决方案1】:

    回答我的问题:

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

    为此,请在推送通知的aps 字典中发送content-available。 从 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用应用程序的背景模式。 在应用委托中实现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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果用户没有选择通知,我没有找到从通知中心获取消息的方法。 stackoverflow.com/questions/11290661/… 也有同样的解释。如果您知道即使用户没有选择也可以从通知中心获取通知的程序,您能否分享一下如何实现?
      • 很抱歉,没有办法实现。但是在 [link]stackoverflow.com/questions/11290661/... 有一个答案方法可以检查 applicationIconBadgeNumber,我不知道它是否满足您的需求。
      • 我看到了你的新答案,但是这个静默推送通知并没有被用户完全接收到,这取决于很多情况,比如用户使用手机的习惯、打开你的应用程序的时间、当前的内存状态等。跨度>
      • 我已经检查了应用程序处于活动状态并处于后台时的情况。两次它似乎都在工作。您是否在任何文档中找到了您提到的信息。可以分享一下吗?
      • 我错了,用户总是可以收到静默通知,但可能不会在后台启动应用程序。可以看WWDC2014的“What's New in iOS Notifications”版块,推视频中提到
      【解决方案3】:

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

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

      【讨论】:

      • 服务器请求是指从应用程序自己的服务器获取最后发送的推送消息。这样对吗?或者有没有办法从 APNS 或通知中心获取最后发送的通知?这里解释的答案仍然有效吗? stackoverflow.com/questions/11290661/…
      • 不,很遗憾没有办法做到这一点,您的应用服务器应该这样做。
      • 好的。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2018-08-15
      相关资源
      最近更新 更多