当有人点击“继续”按钮时,我试图通知我的用户,但我的 Firebase 函数日志中不断出现一些错误。
未捕获的异常&
提供给 sendToDevice() 的注册 token 必须是非空字符串或非空数组
exports.observeGoing = functions.database.ref('/going/{postId}/{uid}').onCreate((snapshot,context) => {
var postId = context.params.postId;
var uid = context.params.uid;
console.log('User: ' + uid + ' is going to your activity');
return admin.database().ref('/users/' + uid).once('value', snapshot => {
var creatorOfPost = snapshot.val();
admin.database().ref('/users/' + uid).once('value', snapshot => {
var userGoing = snapshot.val();
var payload = {
notification: {
body: userGoing.usernames + " is going",
sound: "default"
}
}
admin.messaging().sendToDevice(creatorOfPost.fcmToken, payload)
.then((response) => {
console.log('Successfully send message:', response);
return response
})
.catch((error) =>{
console.log('Error sending message:', error);
});
})
})
})
最佳答案
您收到该错误是因为 creatorOfPost.fcmToken
可能为 null
根据firebase文档,第一个参数admin.messaging.Messaging.sendToDevice()不能为空。
但是在您的代码中,有两种可能违反此前提条件。
creatorOfPost.fcmToken
可以为 null
在调用admin.messaging.Messaging.sendToDevice()之前进行空检查
creatorOfPost
可以为 null
firebase.database.Reference.once()返回DataSnapshot ,但并不意味着一定有相应的文档。
所以,var CreatorOfPost = snapshot.val();
可以为 null。
也许你可以这样检查:
return admin.database().ref('/users/' + uid).once('value', snapshot => {
if (!snapshot.exists()) {
return; // or do what you would like
}
var creatorOfPost = snapshot.val();
// ...
// ...
})
关于javascript - 当按钮点击错误时发送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094983/