javascript - 当按钮点击错误时发送通知

标签 javascript firebase firebase-realtime-database firebase-cloud-messaging google-cloud-functions

当有人点击“继续”按钮时,我试图通知我的用户,但我的 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);
  });
})
})
})

Firebase Database

最佳答案

您收到该错误是因为 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/

相关文章:

javascript - 如何将 login_hint 传递给 gapi.auth.authorize?

javascript - 防止某些 HTML 元素被复制

javascript - 如何使用 NextJS 使用自托管字体?

javascript - Firebase:为什么我们需要 bindTo 方法?

Firebase HTTP 函数 CORS

android - 找不到 com.google.firebase :firebase-database:9. 2.0

java - 如何正确解析 Firebase DataSnapshot 值

javascript - 用于生成动画效果序列的算法

android - 如何将对象从android应用程序传递到firebase云函数以完成Paypal支付功能?

java - Firebase - 为注册用户生成带有 child 的 child