当前位置: 首页 > 知识库问答 >
问题:

应用程序未激活时推送通知无法正常工作(已终止)

刘奇
2023-03-14

我面临推送通知的问题,我使用谷歌云消息,

我的问题是,我的应用程序处理一些缓存数据,我使用推送通知中的数据刷新缓存,因此当用户关闭应用程序(主页按钮向上滑动)并且应用程序收到推送通知时,它不会调用方法didReceiveMemotentification,因此,应用程序无法访问该通知的有效负载并更新缓存的数据。

那么,有没有办法做到这一点?

只有当用户点击通知并且应用程序通过应用程序:didFinishLaunchingWithOptions方法获得通知时,才可以?

如果用户通过单击应用程序图标打开应用程序,我无法获取通知的有效负载?

PD:如果应用程序位于前台或后台(未被杀死),那么它可以完美工作

共有3个答案

戚鸿
2023-03-14

如果应用程序被终止。调用了application:didfishlaunchingwithoptionsapplication:didReceiveMemotentification:fetchCompletionHandler:。在前面的一个例子中。通知键(远程或本地)在选项参数中传递。只有在远程通知的情况下才调用后一个。苹果文档中对此过程进行了详细说明。快照也粘贴在这里。

处理可采取行动的通知

如果您的应用程序未在前台运行,则要在用户只需滑动或点击通知时处理默认操作,iOS在前台启动您的应用程序,并调用UIApplicationDelegate方法application:didFinishLaunchingWithOptions:在选项字典中传递本地通知或远程通知。在远程通知的情况下,系统还调用应用程序:didReceiveMemoteNotify:fetchCompletionHandler:

如果你的应用已经在前台,iOS不会显示通知。相反,为了处理默认操作,它调用uiapplicationelegate方法之一application:didReceiveLocalNotification:application:didReceiveMemoteNotification:fetchCompletionHandler:。(如果未实现应用程序:DidReceiveEmotentification:fetchCompletionHandler:,iOS调用应用程序:DidReceiveEmotentification:

最后,要处理iOS 8或更高版本中可用的自定义操作,您需要在应用程序委托上实现两个新方法中的至少一个,application:handleActionWithIdentifier:forRemoteNotification:completionHandler:application:handleActionWithIdentifier:forLocalNotification:completionHandler:。在这两种情况下,您都会收到操作标识符,您可以使用它来确定点击了什么操作。您还将收到远程或本地通知,您可以使用该通知检索处理该操作所需的任何信息。最后,系统将传递给您完成处理程序,您必须在完成操作时调用该处理程序。清单2-8显示了一个调用自定义操作处理程序方法的示例实现。参考苹果文档

编辑:

用户点击警报中的默认按钮或点击(或单击)应用程序图标。如果点击默认操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序将调用其代理的应用程序:didFinishLaunchingWithOptions:method,传入通知负载(用于远程通知)或本地通知对象(用于本地通知)。虽然application:didFinishLaunchingWithOptions:不是处理通知的最佳位置,但此时获取有效负载使您有机会在调用处理程序方法之前启动更新过程。参考:苹果文档

岳城
2023-03-14

这是预期的行为<如果用户终止了应用程序,则不会调用code>DidReceivereMotentification,除非您的应用程序具有VoIP权限。

柴昆杰
2023-03-14

如果您希望您的应用程序即使在被终止时也能收到推送通知,请将键“content available”:“1”添加到推送负载中。

看这里

编辑:在进一步挖掘之后,我发现无声推送(例如可用内容:1)不会在应用程序被用户杀死时唤醒应用程序:

但是,如果用户强制退出应用程序,系统不会自动启动应用程序

我必须说,我真的不明白为什么操作系统不让我的应用程序在静默推送到达时唤醒。那有什么意义???

 类似资料:
  • 但是当我通过两次点击home按钮并滑动应用程序来终止应用程序时,就不会收到json通知。(换句话说,方法“应用程序:DidReceiverEmoteNotification:”未调用)。 我使用NSLog代码来检查通知接收和监视设备CONSOL。 我在stackoverflow的帖子中看到了所有类似的问题,但没有找到答案。

  • 我正在使用Firebase云消息发送推送通知。 和: 在中声明: 问题是,当应用程序运行时,显示良好,通知带有默认声音,但当应用程序在后台或未运行时,通知没有任何声音,而不显示在状态栏中。 为什么会出现这种情况,我如何修复它?

  • 即使应用程序从后台被杀死或从内存中被刷出,我如何接收到设备的fcm通知。我使用维梧、Oppo、松下设备。但在应用程序被终止时未收到通知。

  • 我想用Xamarin格式的C#创建一个基于文本的Android游戏。 在故事中,我想设置角色任务,这需要一些时间,例如“我去挖这个洞,完成后给你打电话。” 如何将通知设置为在设置的时间之后显示?例如,上述声明可能需要10分钟,然后用户收到继续游戏的通知? 我一周前才开始做C#,所以如果这是noobish,或者已经被问到了,我道歉。我到处都找过,但有几种类型的通知,当我试图理解它时,似乎我在读法语。

  • 当app不再活动(即使是最近的任务)时,如何从FCM接收推送通知。我看到gmail、whatsapp都有这个功能。我正在使用FCM进行推送通知。我使用了WakefulBroadcast接收器来唤醒设备。我怎么用这个? 服务类别: