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

Java FCM通知有效负载-在应用程序未运行时确定主题名称,java,android,firebase,firebase-cloud-messaging,firebase-notifications,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" } } 我的应用程序订阅多个主题。当应用程序未运行时,Fire

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

{
  "to": "/topics/599_7041",
  "priority": "high",
  "data": {
    "id_message": "45" 
  }
  "click_action": "SHOW" 
  "notification" : {
      "body" : "Lorem ipsum",
      "title" : "Sample" 
    }
}
我的应用程序订阅多个主题。当应用程序未运行时,Firebase显示通知,并允许我在点击通知消息后运行应用程序,同时提供单击操作并将数据(在本例中为
message\u id
)传递给已启动的应用程序实例

到目前为止还不错。然而,另外,我需要确定从哪个订阅的主题通知接收。在从通知启动新应用程序实例时,我是否可以确定它,或者我需要将主题名称添加到数据中(在
message_id
旁边)

我知道当我的应用程序运行时,我可以通过以下方式确定
字段:

@Override
public void onMessageReceived(@NonNull final RemoteMessage remoteMessage)
{
 //....
 String to = remoteMessage.getTo();
}
但是,如果我的应用程序没有运行,那么就不会调用
onMessageReceived

您可以这样做:

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()

通知{..}
中,您可以使用
valueObject.title
作为主题名称,因此在接收通知时,主题名称将位于通知的标题中,这样您就可以知道它是什么主题


关于更多信息检查,首先我不使用JS(但id不重要),其次,我正在寻找一些不需要修改请求的解决方案,我希望有某种方法可以检索到已经存在的
to
字段。另外,我不想在标题中包含主题名称,最好将其放在
数据中
那么你在后端使用的是什么?实际上这并不重要,最重要的是后端只使用json数据执行POST请求,正如我在问题中提到的。是的,正如我在回答中提到的,它正在数据库中发布数据,并发送android手机的通知。。我添加主题名称作为标题的原因是为了让用户知道他从哪个主题收到此通知最终用户不应该知道添加了哪个主题主题。标题≠ 主题。最好在
数据
结构中添加额外的数据,但这不是我想要的,您可以尝试使用消息的生命周期。更多信息您可以找到寿命与我的问题的关系?您如何从控制台发送主题消息?查看我的问题,包含消息正文(json)在消息标题中添加主题名称