FCM通知有效负载 - 确定应用未运行时的主题名称

时间:2017-12-18 09:00:28

标签: java android firebase firebase-cloud-messaging firebase-notifications

后端服务器发送FCM通知,如下所示:

{
  "to": "/topics/599_7041",
  "priority": "high",
  "data": {
    "id_message": "45" 
  }
  "click_action": "SHOW" 
  "notification" : {
      "body" : "Lorem ipsum",
      "title" : "Sample" 
    }
}

我的应用程序订阅了多个主题。当应用程序未运行时,Firebase会显示通知并允许我在点击通知消息后运行应用程序,并提供单击操作并将数据(在本例中为message_id)传递给已启动的应用程序实例。

到目前为止很好。但是,此外,我需要确定从哪个订阅主题通知收到。从通知中启动新的应用实例时,我可以以某种方式确定它吗?或者我需要向数据添加主题名称(message_id旁边)?

我知道我可以在我的应用运行时确定to,这样:

@Override
public void onMessageReceived(@NonNull final RemoteMessage remoteMessage)
{
 //....
 String to = remoteMessage.getTo();
}

但是,如果我的应用未运行,那么onMessageReceived将不会被调用。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

exports.pushNotification =
functions.database.ref('/messages/{pushId}').onWrite( event => {

console.log('Push notification event triggered');


var valueObject = event.data.val();

console.log("it is"+ valueObject.title);
//Create a notification
const payload = {
 notification: {
    title:valueObject.title,
    body: valueObject.message,
    sound: "default"
},
};

这样您就可以使用数据库触发器onWrite来检查是否已在pushid下编写了任何消息。

然后使用以下方法从数据库中检索数据:var valueObject = event.data.val();

notification{..}中,您可以使用valueObject.title作为主题名称,因此在收到通知时,主题名称将显示在通知的标题中,这就是您如何知道主题是。

有关详情,请查看https://firebase.google.com/docs/functions/database-events