当前位置: 首页 > 面试题库 >

iOS推送通知:当应用程序在后台运行时,如何检测用户是否轻按了通知?

刘野
2023-03-14
问题内容

关于此主题,有很多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使用
两种不同的委托方法进行通知接收和通知点击。
我认为大多数开发人员总是想知道是否使用了通知

希望这对遇到此问题的其他人有所帮助。苹果在这里
也没有清楚地记录下来

所以花了我一段时间才弄清楚。



 类似资料:
  • 关于这个主题有很多stackoverflow线程,但是我仍然没有找到一个好的解决方案。 如果应用程序不在后台,我可以在调用中检查,查看是否从通知中打开。 如果应用程序在后台,所有帖子都建议使用并检查应用程序状态。但正如我所做的实验(也正如这个API的名称所暗示的那样),当收到通知时会调用这个方法,而不是点击。 所以问题是,如果应用程序启动后后台运行,并且您知道从收到通知(此时不会触发),您如何知道

  • 我看了很多问题和答案为同一问题。 我现在知道的是 当应用程序是后台应用程序时,不会调用“DidReceiveEmotonification” DidReceiveEmotentification只在应用程序位于前台时调用,或者当用户点击应用程序位于后台的通知时调用 应用程序:didFinishLaunchingWithOptions:在用户点击通知打开应用程序(如果应用程序被终止)时调用 我的情况

  • 我想在通知屏幕上显示通知,无论应用程序是在后台还是前台。我为寻找解决办法而疲惫不堪。非常感谢任何帮助。

  • 当应用程序在后台时,如何更新包含数据负载的Firebase推送通知?有没有办法在通知中指定通知id给Firebase API? 完整的项目在github https://github.com/akshatashan/FireBaseCloudMessagingDemo中

  • 在我的应用程序中,我使用了消息推送服务,但我的问题是,当我关闭应用程序时,通知会出现,但当我打开应用程序然后发送通知时,通知不会出现。请帮帮我。

  • 我的应用程序有推送通知(FCM)。当应用程序在前台运行时,我可以在onMessageReceived()函数中获取数据负载。当应用程序在后台运行或应用程序完全关闭时,不会调用onMessageReceived()函数。我的问题是,当app在后台或关闭时,是否可能获得数据有效载荷? 提前道谢!