Firebase函数上的推送通知-Iterate onWrite返回



所以我尝试使用Firebase函数向用户发送推送通知;FCM。我引用了示例代码来填充推送,当我使用硬编码的令牌时,它可以工作,推送也可以正确发送。下面是我的工作云函数代码。

'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.sendChatNotification = functions.database.ref('/user_pushes/{uid}').onWrite((change, context) => {
const afterData = change.after.val();
//let tokens = "My_hardcoded_device_token"
console.log('tokens',afterData.fcm_tokens)
let tokens = afterData.fcm_tokens
const payload = {
notification: {
title: afterData.sender_name,
body: afterData.message,
sound: "default"
}
};
return admin.messaging().sendToDevice(tokens, payload);
});

下面是我的"/user_pushes/{uid}"RTDB的json。

{ fcm_tokens: 
{ 'token1': 0, 
'token2': 0, 
'token3': 0, }, 
message: '👍🏼', 
sender_name: 'sender name'
}

当然,我想从我的数据库中获取令牌。我希望使用like-for-in-loop从名为"fcm_tokens"的节点获取令牌,但还没有找到合适的代码段。我希望我的代币是一种数组形式,这样推送就可以发送到多个接收器。我是一个没有经验的自学iOS开发人员,还没有学习服务器端编程,所以如果我的方法不合适,请务必建议!非常感谢!

###编辑###

我试图用下面的一行代码检索令牌,但它抛出了另一个错误,说令牌不应该是空字符串或数组,尽管它可能不是空的。也许我的令牌是密钥而不是值,这就是为什么?如果是这样的话,有人能建议如何将密钥放入数组吗?

let tokens = afterData.fcm_tokens
console.log('tokens',afterData.fcm_tokens)
tokens { 'fWgm79ifOUVSofW2XXhoKt:APA91bHovn04k5lwnkzfQD74VmekV8FoTSUh8pyr9d_I0EMDPuzFdKpD7Y4OU_AKHVjalGQaGE_I6A5m6livf8QrxHTSTmn9h6EB9qyBde_reQRcjU6cZLHLLXx2cO0w6f3MOZOFnYDv': 0 } 
Error: Registration token(s) provided to sendToDevice() must be a non-empty string or a non-empty array.
at FirebaseMessagingError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28)
at new FirebaseMessagingError (/srv/node_modules/firebase-admin/lib/utils/error.js:254:16)
at Messaging.validateRegistrationTokensType (/srv/node_modules/firebase-admin/lib/messaging/messaging.js:729:19)
at Messaging.sendToDevice (/srv/node_modules/firebase-admin/lib/messaging/messaging.js:328:14)
at exports.sendChatNotification.functions.database.ref.onWrite (/srv/index.js:27:26)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:134:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7) 

经过几次变通后,我终于把它搞定了。事实证明这很简单。只需使用forEach语法捕获键即可迭代json。

const tokens = Object.keys(afterData.fcm_tokens)

有关更多详细信息,请参阅下文。

带有云功能的FCM中注册令牌错误

相关内容

  • 没有找到相关文章

最新更新