关于此主题,有很多stackoverflow线程,但是我仍然 没有找到一个好的解决方案。
如果该应用程序不在后台,则可以签 launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]入 application:didFinishLaunchingWithOptions:呼叫以查看是否已从 通知中打开该应用程序。
如果应用程序在后台运行,则所有帖子都建议使用 application:didReceiveRemoteNotification:并检查应用程序状态。 但是,正如我进行的实验(以及该API的名称所暗示的那样),该方法 在收到通知时被调用,而不是被窃听。
所以问题是,如果启动了应用程序,然后将其后台运行,并且您知道 收到了通知application:didReceiveNotification (此时application:didFinishLaunchWithOptions:将不会触发),那么 您如何知道用户是否通过轻按通知或只是 轻按应用程序图标?因为如果用户点击通知,则 期望打开该通知中提到的页面。否则不 应该。
我可以将其handleActionWithIdentifier用于自定义操作通知,但这 仅在点击自定义操作按钮时触发,而不是在 用户点击通知主体时触发。
谢谢。
编辑:
在阅读下面的一个答案之后,我想我可以以此方式澄清我的 问题:
我们如何区分这两种情况:
(A)1.app进入后台;2.收到通知;3.用户点击 通知;4.应用进入前台
(B)1.app进入后台;2.收到通知;3.用户忽略该 通知,稍后点击应用程序图标;4.应用进入前台
由于application:didReceiveRemoteNotification:触发在这两种情况下 ,在第2步。
或者,应该application:didReceiveRemoteNotification:仅在步骤3中 为(A)触发,但是我以某种方式配置了我的应用程序错误,因此我在步骤 2中看到了它?
好吧,我终于想通了。
在目标设置➝功能选项卡➝后台模式中,如果选中 “远程通知”,application:didReceiveRemoteNotification:则 在通知到达时(只要应用程序处于 后台)就会被触发,在这种情况下,无法判断是否用户将 点击通知。
如果您取消选中该框,application:didReceiveRemoteNotification:则 只有在您点击通知时才会被触发。
选中此框将更改应用程序 委托方法之一的行为,这有点奇怪。如果选中该框会更好,Apple使用 两种不同的委托方法进行通知接收和通知点击。 我认为大多数开发人员总是想知道是否使用了通知 。
希望这对遇到此问题的其他人有所帮助。苹果在这里 也没有清楚地记录下来 , 所以花了我一段时间才弄清楚。