首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从系统托盘android firebase FCM的通知中检索通知值

从系统托盘android firebase FCM的通知中检索通知值
EN

Stack Overflow用户
提问于 2017-04-04 04:30:26
回答 4查看 15.4K关注 0票数 13

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

在这些情况下,通知将传送到设备的系统托盘,数据有效负载将在启动程序活动意图的附加部分中传送。

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

代码语言:javascript
复制
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();
        }
    }

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

代码语言:javascript
复制
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification" : {
  "body" : "great match!",
  "title" : "Portugal vs. Denmark",
  "icon" : "myicon"
  }
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-04 10:26:20

这就是预期的行为(正如您在documentation中看到的那样)。如果您正在使用notification-only消息有效负载(确实如此),则仅当您的应用程序处于前台时才会调用onMessageReceived(),否则系统托盘将接收它。

(重点是我的)中提到的data

在这些情况下,通知将传送到设备的系统托盘,并且data有效负载将在启动程序活动意图的附加部分中传送。

data消息有效负载(请参阅Message Types)。

您必须同时使用notificationdata发送有效负载。如下所示:

代码语言:javascript
复制
{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "notification" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
    },
  "data": {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
  }
}

另请参阅my answer here

票数 8
EN

Stack Overflow用户

发布于 2017-04-04 14:41:35

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

发自:

代码语言:javascript
复制
{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "notification" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
   }
}

代码语言:javascript
复制
{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
   }
}

解释:

您的系统中运行着一个firebase服务,它适用于所有应用程序,并处理所有包含"notification"标签的推送通知。但如果只包含数据“标签,它只是将任务移交给由应用程序创建的服务,在那里您可以执行anything.In您的案例显示用户通知,并将其保存到本地数据库。有关更多信息,请阅读此处Documentation : Handle Messages

票数 5
EN

Stack Overflow用户

发布于 2017-04-04 09:14:25

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43193700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档