【问题标题】:Get data payload of android notification on dismiss在关闭时获取android通知的数据有效负载
【发布时间】:2016-07-13 11:31:14
【问题描述】:

我正在使用 Firebase Cloud Messaging 向我的应用发送带有数据负载的通知。

当我发送通知时,如果我的应用程序正在运行(前台),我会从 FirebaseMessagingService 类中获取覆盖 onMessageReceived() 的数据。

如果我的应用没有运行,通知将发送到“系统托盘”,当用户点击通知时,我的应用启动,我可以通过意图的getExtras 获取数据。

但是,如果用户关闭“系统托盘”中的通知,我如何获取数据?

我需要编写一些“监听”通知的后台服务来获得这个?

【问题讨论】:

  • 我认为您必须自己管理通知才能执行此操作,而不是让 firebase 生成通知

标签: android firebase firebase-cloud-messaging


【解决方案1】:

您似乎正在从 Firebase 控制台发送通知。这些消息总是notification messages。如果notification message 具有随附的数据有效负载,则只有当用户点击通知时,该数据才可用于您的应用程序。如果用户从不点击通知,那么您的应用将无法使用该数据。因此,您不应使用notification messages 将应用程序关键数据发送到您的应用程序。

如果您发送data messages,它们总是由onMessageReceived 回调处理。此时,您可以静默处理消息或显示您自己的通知。因此,如果您想确保您的应用程序有机会处理消息中的数据,请使用data messages

【讨论】:

  • 我没有使用 Firebase 控制台。我写了一些 PHP 代码来像这样一起发送通知和数据消息:'to' => "/topic/test", 'notification' => "test", 'data' => "test" 但是,我明白了在 Firebase 文档中,我们只能发送通知、数据或两者。我会尝试只发送数据来测试它是否有效
  • 仅供参考,它应该是 /topics/test,通知和数据负载也有特定的格式,它们不能只是字符串。
  • 你好@Arthur。我将此作为我如何发送消息的示例。实际上我创建了一个 JSON,然后通过 POST 发送到 Firebase 服务器。
  • 我只尝试了数据消息,如果我的应用程序在前台或后台运行(最近的应用程序列表),则会调用 onMessageReceived。但是,如果我从最近的列表中关闭(删除)应用程序,则不会发送/接收消息,因为 onMesssageReceived 没有被调用。
  • 这可能是由于制造商对设备的限制,不允许为未运行或在后台的应用程序启动服务。您是否在其他设备或模拟器上尝试过?
【解决方案2】:

所以基本上你想存储这些数据?

如果您想存储该数据,请在 OnReceive() 方法中编写代码并在其中编写数据库插入代码。

并在其中放置一个标志,例如“Dismissed=true” 如果用户打开您的通知,则将其设置为 false,您可以获得结果。

没有特定的方法可以检测您应用的通知是否被关闭。所以你必须手动维护这些数据。

【讨论】:

  • 我正在使用 onMessageReceived() 来存储数据。问题是 onMessageReceived() 仅在我的应用程序运行时调用。如果我的应用程序未运行,则通知将传递到“通知托盘”,这样,如果用户“打开”通知,我只会通过 intent.getExtras() 获取数据。如果他关闭通知,数据就会丢失,我无法得到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多