虽然有很多关于这个主题的stackoverflow帖子,但我仍然没有找到一个好的解决方案。
如果应用程序不在后台,我可以在application:didFinishLaunchingWithOptions:
调用中检查launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
以查看是否从通知打开它。
如果应用程序在后台,所有的帖子都建议使用application:didReceiveRemoteNotification:
并检查应用程序状态。但是,正如我所实验过的(并且正如这个API的名称所暗示的那样),当接收到通知而不是被点击时,会调用此方法。
因此问题是,如果启动应用程序并将其移到后台,并且您知道从application:didReceiveNotification
(在此时不会触发application:didFinishLaunchWithOptions:
)接收到通知,则如何知道用户是通过点击通知恢复应用程序还是仅仅点击应用程序图标?因为如果用户点击了通知,则期望打开该通知中提到的页面,否则不应该。
我可以使用handleActionWithIdentifier
来处理自定义操作通知,但这仅在用户单击自定义操作按钮时才会触发,而不是在用户单击通知的主体时触发。
谢谢。
编辑:
在阅读下面的一个答案后,我认为可以这样澄清我的问题:
我们如何区分这两种情况:
(A) 1.应用程序进入后台;2.收到通知;3.用户点击通知;4.应用程序进入前台
(B) 1.应用程序进入后台;2.收到通知;3.用户忽略通知并稍后点击应用程序图标;4.应用程序进入前台
由于application:didReceiveRemoteNotification:
在步骤2中同时被触发,所以应该如何区分这两种情况。
或者,application:didReceiveRemoteNotification:
只应在(A)步骤3中被触发,但我配置了应用程序出错,因此我在步骤2中看到它吗?
didFinishLaunching
中检索其中的数据,然后根据需要采取行动,将用户发送到您认为合适的视图(这就是您在第一段中暗示的内容),这基本上是您如何知道他们是否通过通知打开了应用程序。A)您是正确的,因为它是在启动后发生的方法,这是您希望处理负载的位置,如果用户从通知中打开它。请阅读上面链接中的文档2.5。好文章。 - soulshined