在我的android应用程序中,我想为从一个用户发送到另一个用户的文本消息发送通知,我已经将这个Node.js函数部署到firebase函数中:
'use strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotification = functions.database.ref(`/notification/{receiver_user_id}/{notification_id}`)
.onWrite((data, context) =>
{
const receiver_user_id = context.params.receiver_user_id;
const notification_id = context.params.notification_id;
console.log('We have a notification to send to :' , receiver_user_id);
if (!data.after.val())
{
console.log('A notification has been deleted :' , notification_id);
return null;
}
const DeviceToken = admin.database().ref(`/users/${receiver_user_id}/user_id`).once('value');
return DeviceToken.then(result =>
{
const token_id = result.val();
console.log("Token Id ", token_id);
const payload =
{
notification:
{
title: "New Mesaage",
body: `you have a new Message, Please Check.`,
icon: "default"
}
};
console.log("This is payload ", payload);
return admin.messaging().sendToDevice(token_id, payload).then()
.catch(function (error)
{
console.log("Error sending message: ", error); // here no return
});
});
});
我认为问题出在sendToDevice((方法上,因为我没有收到任何通知,也不想通过device_token发送。
我想将通知发送到具有特定";user_id";已登录这是我的数据库型号
这是我得到的日志:
并且我不想通过device_token 发送
如果要将消息定向到特定用户的设备,则必须使用设备令牌。这就是它的工作方式。
FCM对您应用程序的个人用户一无所知。FCM只知道你在应用程序中收集代币并发送到后端(或存储在数据库中(的个别设备。您必须以某种方式将令牌与用户帐户相关联。您还应该假设一个用户可能正在使用多个设备。
您可能首先应该做的是开始收集设备令牌,并将它们存储在用户数据下的字段中。然后,当您查询该用户时,您可以找到用于发送消息的设备令牌。