从系统托盘安卓火力底座 FCM 中的通知中检索通知值



我正在使用 Firebase 向我的应用发送通知。我想将每台设备上收到的通知保存在本地数据库中。问题是,当应用程序在后台并收到通知时,不会调用方法onMessageReceived(),而是根据文档将通知添加到系统托盘中。该文档还提到了以下内容,用于在应用处于后台时接收通知:

在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的意图的附加内容中传递。

因此,当我尝试访问意图中的附加内容时,找不到通知的键。我在MainActivity.java的代码:

if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            Object value = getIntent().getExtras().get(key);
            Toast.makeText(this, "Key: " + key + " Value: " + value, Toast.LENGTH_LONG).show();
        }
    }

我们从服务器发送的通知:

{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
  "body" : "great match!",
  "title" : "Portugal vs. Denmark",
  "icon" : "myicon"
  }
}

有人知道我如何检索通知中的值吗?

这是预期的行为(如您在文档中看到的(。如果您使用的是notification消息有效负载(您是(,则仅当您的应用位于前台时才会调用onMessageReceived(),否则,系统托盘将接收它。

(强调我的(中提到的data

在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的意图的附加内容中传递。

是消息负载data(请参阅消息类型(。

您必须发送同时包含notificationdata的有效负载。这样:

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "notification" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
    },
  "data": {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
  }
}

也在这里看到我的答案。

您所要做的就是更新通知推送格式。

从:

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "notification" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
   }
}

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
   }
}

解释:

您的系统正在运行一项 Firebase 服务,该服务适用于所有应用,如果它包含"通知"标签,则处理所有推送通知。 但是,如果仅包含"data">标签,则只需将任务移交给应用程序创建的服务,您可以在其中执行任何操作。在您的情况下,显示用户通知并将其保存到本地数据库。有关更多信息,请阅读此处文档:处理消息。

这不是一个简单或干净的解决方案,但您可以使用 NotificationListenerService 来接收每个通知的回调。另一个限制是它仅支持 API 18 及更高版本。

将此添加到清单文件

        <intent-filter>
            <action android:name=".MainActivity" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

相关内容

  • 没有找到相关文章