javascript - 如何使用 FCM 发送通知?
问题描述
我写了一个云函数,在我的数据库中侦听集合中的文档创建
这是功能,
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().functions);
var newData;
exports.myTrigger = functions.firestore.document('FCM/{id}').onCreate(async (snapshot, context) => {
//
if (snapshot.empty) {
console.log('No Devices');
return;
}
newData = 'hello';
const deviceIdTokens = await admin
.firestore()
.collection('FCM')
.get();
var tokens = [];
var i=0;
for (var token of deviceIdTokens.docs) {
tokens.push(token.data().ar1[i]);
i++;
}
var payload = {
notification: {
title: 'push title',
body: 'push body',
sound: 'default',
},
data: {
push_key: 'Push Key Value',
key1: newData,
},
};
try {
const response = await admin.messaging().sendToDevice(tokens, payload);
console.log('Notification sent successfully');
} catch (err) {
console.log(err);
}
});
这个功能很奇怪,
例如,有时它会发送通知,有时则不会。
它会引发类似“TypeError:无法读取未定义的属性'0'”的错误。
我不知道如何解决这个问题,
在我的 arr1 字段中,我有一组设备令牌,我想向其发送通知,
我希望该功能仅向刚刚创建的设备(使用令牌)发送通知(在新创建的文档中),然后删除该文档。
我认为它是一次向所有文档发送通知。
我在节点上很新..
请帮帮我。
更新:- 这是我的文档结构
解决方案
来自此行的类型错误:
tokens.push(token.data().arr1[i]);
所以我只能说有时 token.data() 没有 arr1 属性。
推荐阅读
- python - 从另一个模块调用包含命令行参数的模块
- python - 我的 for 循环内部函数中的错误是什么。错误:“字符串索引必须是整数”。在空闲状态下运行它,但它不会给我错误
- cassandra - Scylla 登录 CentOS 和 RedHat
- regex - 如何用 Python 中的正则表达式中的函数替换匹配项
- pandas - 公共索引中最接近的值
- java - 使用 JBOSS JNDI 数据源时,石英在 BLOB 上命中异常
- android - ChildEventListener 在排序列表时顺序错误
- mongodb - 密码的MongoDB URI连接环境变量不起作用
- react-native - React Native 初始 App 尺寸过大
- android - 我可以以编程方式(根)从系统对话框中选择项目吗?