问题描述
我在Java语言方面还很陌生,通过一些Google帮助,我在index.js中编写了以下函数,以便在更新Firestore表时向我的应用发送推送消息。
Index.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotificationToFCMToken = functions.firestore.document('REQ/{mId}/Req/{bId}').onWrite(async (event) => {
//const uid = event.after.get('userUid');
const title = event.after.get('personName');
const content = event.after.get('content');
const fcmToken = event.after.get('token');
//let userDoc = await admin.firestore().doc(`users/${uid}`).get();
//let fcmToken = userDoc.get('token');
var message = {
notification: {
title: title,body: content,},token: fcmToken,}
let response = await admin.messaging().send(message);
console.log(response);
});
以上功能正常运行,并向应用程序发送了推送消息并显示通知。但是问题在于它应该出现在 FirebaseMessagingService 类中的应用程序中,通过它可以自定义它。
解决方法
Firebase Cloud Messaging可用于发送两种类型的消息。来自messages types上的文档:
- 通知消息,有时被称为“显示消息”。这些由FCM SDK自动处理。
- 数据消息,由客户端应用处理。
当您希望FCM处理代表客户端应用程序显示的通知时,请使用通知消息。当您要在客户端应用程序上处理消息时,请使用数据消息。
因此,如果您希望应用程序代码处理该消息,则应发送数据消息。
,您需要按照文档here
中所述发送数据消息// your message object should look like this
var message = {
data: {
title: title,body: content,},token: fcmToken,}
,
两种类型:
1。通知消息:
var message = {
notification:
{
title: 'This is title',body: 'This is body!'
},condition: condition
};
此参数指定通知有效负载的预定义的,用户可见的键值对。 FCM代表客户端应用程序自动将消息显示给最终用户设备。通知消息具有一组预定义的用户可见键。
2。数据信息:
var message = {
data: {
score: '850',time: '2:45'
},token: registrationToken
};
此参数指定消息有效负载的自定义键值对。客户端应用负责处理数据消息。数据消息仅具有自定义键值对。(请参见https://stackoverflow.com/a/39149287/9391162 有关更多详细信息,我已经使用过。)
因此,当您要在客户端中处理它时,将使用数据消息。
此link显示了在后端发送通知,还包括Node.js。