我可能会通过对抗风车,但我需要对远程通知的知识进行一些清理。我想在我的应用关闭时处理通知(从应用切换器中杀死),但用户决定不通过点击通知,而是通过点击应用图标来打开它。
据我所知,当应用程序被杀并且远程通知到达时,用户必须点击通知以launchOptions
从didFinishLaunchingWithOptions:
传递通知但是......我想在处理此通知时用户点击应用图标,没有任何内容传递给lauchOptions
。在那种情况下,目前我根本没有通知......
无论应用程序如何启动,都可以在后台处理通知并对其执行操作吗?也许didReceiveRemoteNotification: fetchCompletionHandler:
?
答案 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的设备上点按应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息
因此,如果您的应用程序是从图标启动的,那么您将无法收到通知数据。您需要应用程序查询负责发送通知的服务/数据存储,以查看是否存在未完成的数据/事务/其他内容。