Firebase 函数的推送通知 - 迭代 onWrite 返回
Posted
技术标签:
【中文标题】Firebase 函数的推送通知 - 迭代 onWrite 返回【英文标题】:Push notification on Firebase Functions - Iterate onWrite returns 【发布时间】: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)
【问题讨论】:
【参考方案1】:经过几次变通办法后,我终于成功了。事实证明这很简单。只需使用 forEach 语法捕获键即可遍历 json。
const tokens = Object.keys(afterData.fcm_tokens)
更多详情,请看下文。
Error with registration token in FCM with Cloud Functions
【讨论】:
如果您需要值而不是键,那么const tokens = Object.values(afterData.fcm_tokens)
将完成这项工作。以上是关于Firebase 函数的推送通知 - 迭代 onWrite 返回的主要内容,如果未能解决你的问题,请参考以下文章
通过 Firebase 函数发送的 Swift 中的加密推送通知
每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用
Firebase 函数无法使用异步 sendMulticast 方法发送一些推送通知
我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用