通过从应用程序图标启动,在应用完全关闭时处理远程通知

时间:2014-03-24 21:28:01

标签: ios iphone objective-c notifications appdelegate

我可能会通过对抗风车,但我需要对远程通知的知识进行一些清理。我想在我的应用关闭时处理通知(从应用切换器中杀死),但用户决定不通过点击通知,而是通过点击应用图标来打开它。

据我所知,当应用程序被杀并且远程通知到达时,用户必须点击通知以launchOptionsdidFinishLaunchingWithOptions:传递通知但是......我想在处理此通知时用户点击应用图标,没有任何内容传递给lauchOptions。在那种情况下,目前我根本没有通知......

无论应用程序如何启动,都可以在后台处理通知并对其执行操作吗?也许didReceiveRemoteNotification: fetchCompletionHandler:

2 个答案:

答案 0 :(得分:1)

是的,你正在与风车作斗争:)

我建议你阅读Local and Push Notifications in depth。它有点长,但文档正在澄清。

在本文档的一个片段中,您可以阅读:

  

如果在运行iOS的设备上点击应用程序图标,则   应用程序调用相同的方法   (应用程序:didFinishLaunchingWithOptions :),但不提供   有关通知的信息。

后来:

  

处理远程通知时   application:didFinishLaunchingWithOptions:或   applicationDidFinishLaunching:,应用程序委托可能执行   一项重要的额外任务。在应用程序启动后,即可   委托应该与其提供者连接并获取等待数据。   清单2-5给出了此过程的示意图。

所以说了这句话,您可以获得服务器中每台设备的已发送通知列表,每次启动应用时都会检查设备是否有任何待处理通知。

答案 1 :(得分:1)

来自Local and Push Notification Programming Guide

  

作为呈现通知的结果,用户点击警报的操作按钮或点击(或点击)应用程序图标。   如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其委托的应用程序:didFinishLaunchingWithOptions:method(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。

     

如果在运行iOS的设备上点按应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息

因此,如果您的应用程序是从图标启动的,那么您将无法收到通知数据。您需要应用程序查询负责发送通知的服务/数据存储,以查看是否存在未完成的数据/事务/其他内容。