【发布时间】:2020-10-06 22:04:44
【问题描述】:
所以我尝试使用 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 从名为“fcm_tokens”的节点获取我的令牌,但还没有找到合适的 sn-p 的运气。我希望我的令牌采用一种数组形式,以便可以将推送发送到多个接收器。我是一个没有经验的自学 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)
【问题讨论】:
标签: firebase push-notification google-cloud-functions firebase-cloud-messaging token