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

当应用处于非活动状态时,未调用Firebase onMessageRecilly

慕容成文
2023-03-14

我正在Android上使用Firebase云消息。

  • 当应用程序位于前台时,我可以成功接收通知和数据消息
  • 文档说明,如果在应用程序处于后台时收到通知消息,则Firebase将代表应用程序向系统托盘发送通知。这对我不起作用
  • 如果发送了数据消息且应用程序位于后台,则会成功调用onMessageReceived方法
  • 最麻烦的情况是,我强制停止应用程序,然后尝试发送通知或数据消息。在这种情况下,不会调用onMessageReceived方法
  • 我已经看过很多关于SO的文章讨论了后台用例,但是我还没有看到任何解释,解释为什么当应用程序完全停止时没有收到任何消息

我有以下清单:

<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
<service android:name=".MyInstanceIdService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

这是文档中关于扩展FirebaseMessagingService的内容:

如果您想在后台接收应用程序通知之外进行任何消息处理,则需要执行此操作。

现在还不完全清楚“在后台接收应用程序通知之外的消息处理”是什么意思。我只能假设他们正在谈论在应用程序关闭时处理消息。

任何帮助将不胜感激。

共有3个答案

谯振国
2023-03-14

问题出在您的后端。看看这个答案。当消息包含通知对象时,仅当应用程序处于前台时才会调用onMessageReceived。因此,您只能使用数据对象。如:

var message = {
         to: user.deviceId, // required
         collapse_key: 'key',
         data: {
              title: 'Hello',
              body: 'Body'
         }
}; 

这适用于每个场景。

饶元章
2023-03-14

要使用API发送消息,可以使用名为AdvancedREST客户端的工具。

{ "data": {
"image": "https://ibin.co/2t1lLdpfS06F.png",
"message": "Firebase Push Message Using API"
"AnotherActivity": "True" },"to" : "f25gYF3***********************HLI"}
隆飞宇
2023-03-14

如果您强制停止某个应用程序,则在该应用程序重新启动之前不会收到任何通知。在应用程序重新启动之前,所有代码都不会工作。

在用户再次手动启动应用程序之前,应用程序的所有服务也将停止

 类似资料:
  • 我正在寻找实现这一点的一般设计: 我想注册到ActivityRecognition API,以便在此API不时调用的IntentService中接收定期更新,而我的应用程序中的所有其他内容都是完全非活动的(这里的目标是避免耗尽设备上过多的电池电量)。 问题是,通过新的ActivityRecognition API设计,它与GooglePlayServices客户端绑定,例如: 从逻辑上讲,如果创建

  • 在应用程序处于活动状态时,调用DidReceiveEmotentification方法,当应用程序处于后台和非活动状态时,不调用DidReceiveEmotentification方法。 代码:- Func应用程序(_应用程序:UIApplication,didReceiveRemote teNotify userInfo:[AnyHasable:任何],fetchCompletionHandle

  • 那么我应该做些什么来实现这个目标呢?如有任何帮助/线索,请提前感谢

  • 问题内容: 我目前正在使用Laravel应用程序,为了防止垃圾邮件,我决定只有活跃的用户才能登录。我目前正在使用Laravel的登录系统,就像Laravel的官方网站教程中一样,这是我的表单操作: 这完全可以正常工作,但是我想检查用户的活动状态,如果不活动,它将被重定向到激活页面,否则它将登录。有没有简单的方法可以执行此操作,或者我有义务制造新的控制器,路由和进行更多验证?谢谢。 编辑:忘记提及我

  • 问题内容: 从MDN for NodeList: 在某些情况下,NodeList是一个实时集合,这意味着DOM中的更改会反映在集合中。例如,Node.childNodes处于活动状态: 在其他情况下,NodeList是静态集合,这意味着DOM中的任何后续更改都不会影响集合的内容。document.querySelectorAll返回一个静态NodeList。 所以....有点烦!是否有任何关于哪些

  • 问题内容: 是否有可能使MySQL中的行处于非活动状态?因此,该行不再用于查询结果吗?我的客户希望保留删除的成员在数据库中的存在,但是我不想编辑所有查询以检查该成员是否被删除。 还是有一种简单的方法将整个行数据移动到另一个“非活动”表中? 问题答案: 您可以重命名当前表,在其中创建“ deleted”列,然后创建一个与当前表同名的视图,并选择“ deleted = 0”。这样,您不必更改所有查询。