我尝试使用节点js和firebase函数将特定消息发送到客户端设备。但是当我尝试执行该函数时,它返回了一个错误,提示:
错误。提供给sendToDevice()的注册令牌必须是非空字符串或非空数组。
图像如下所示。
我猜是我的JS代码中的。所以我也发布了。我实际上要做的是在写入完全不同的节点时从特定节点中检索要使用的数据。所以我要在数据库截图之前发布JS代码。
@CrossOrigin(origins = {"http://10.100.0.207","http://localhost"})
因此,这就是我检索 device_token 节点的方式。来自已将最新数据写入其通知节点的用户。请帮忙。我在做什么错了?
答案 0 :(得分:0)
哇。这真是酷刑。但这终于奏效了。我有这样的东西。
exports.sendNotification8 = functions.database.ref('/Users/{user_id}/Notifications/{notifications_id}')
.onWrite((change,context) =>{
var user_id = context.params.user_id;
console.log(user_id);
// Grab the current value of what was written to the Realtime Database.
var eventSnapshot = change.after.val();
var device_token = admin.database().ref('/Users/'+user_id+'/device_token').once('value');
return device_token.then(result => {
var token_id = result.val();
console.log(token_id);
var str = eventSnapshot.message;
console.log(eventSnapshot.from);
var payload = {
data: {
name: str,
title: eventSnapshot.from,
click_action: "Chats"
}
};
// Send a message to devices subscribed to the provided topic.
return admin.messaging().sendToDevice(token_id, payload).then(function (response) {
// See the MessagingTopicResponse reference documentation for the
// contents of response.
console.log("Successfully sent message:", response);
return;
})
.catch(function (error) {
console.log("Error sending message:", error);
});
});
});