后端服务器发送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
将不会被调用。
答案 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