javascript - 颤振通知/解析错误:意外的令牌管理员
问题描述
我想在他订阅的其他用户上传新项目时向用户发送消息。
我的解决方法:
首先,我检查是否上传了新项目。如果这是真的,我想从上传项目的用户那里获取 uid。然后我转到用户的文件(用户/{上传项目的用户的 uid}),其中订阅他的帐户位于带有其 uid 的字符串列表中。对于此列表中的每个 uid,我想从具有此特定 uid(User/{uid from List}/devicetoken)的用户那里获取 devicetoken,并将每个 devicetoken 添加到字符串列表中。有了这个 devicetoken,我终于想向这个列表中的每个设备发送一条消息。但我对 js 和后端开发的经验并不丰富。
我的代码遵循所描述的方式,但是当我尝试将其部署到 firebase 功能时,我得到了一些警告。
部署到 Firebase 时的警告:
24:17 警告避免嵌套承诺承诺/不嵌套
24:17 警告避免嵌套承诺承诺/不嵌套
30:26 警告不要在循环内创建函数 no-loop-func
46:20 警告避免嵌套承诺承诺/不嵌套
46:20 警告避免嵌套承诺承诺/不嵌套
你们有人可以帮我解决我的问题吗:)?
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initalizeApp(functions.config().firebase);
var msgData;
//listen for new uploades
exports.recipeTrigger = functions.firestore.document('item/{itemId}').onCreate(async(snapshot) => {
msgData = snapshot.data();
//get dat from the user that uploaded the item
await admin.firestore().collection('User/' + msgData.uid).get().then((snapshots) => {
var users = [];
var tokens = [];
if (snapshot.empty) {
console.log('No Users');
return null;
} else {
//get every user uid
users = snapshots.data().subscribers;
for (user of users) {
//user should be the uid
admin.firestore().collection('User/' + user).get().then((snap) => {
for (var token of snap.docs) {
//add devicetoken to a list Avoid nesting promises
tokens.add(token.data().token);
}
return tokens;
}).catch(error => { print(error) })
return users;
}
//specify message content
var payload = {
"notification": {
"title": "From" + snapshots.data().displayName,
"body": "I uploaded a new Recipe",
"sound": "default",
},
"data": {
"senderName": snapshots.data().displayName,
"message": snapshots.data().displayName + "uploaded a new Recipe",
}
}
//send message to devicetokens
return admin.messaging().sendToDevice(tokens, payload).then((response) => {
console.log('Notifications send');
return response;
}).catch((er) => {
console.log(er);
});
}
}).catch(error => { print(error) });
})
解决方案
firestore
错误消息告诉您使用令牌查看第 23 行:
await firestore().document('User/' + user).get().then((snap) => {
你可能是想说admin.firestore().doc(...)
。
推荐阅读
- stripe-payments - Stripe 增加了不可发货产品的运费
- java - 我有一个有头有尾的队列。如何使 tail 不是队列中的下一个节点进入?
- c# - Microsoft Bot Framework - 如何从团队频道获取用户数据
- matlab - 计算大量图片上气泡的平均大小
- sql - 指定非布尔类型的表达式... sql server
- google-analytics - 我的 GA 目标事件设置未使用 OnClick 按钮触发
- c# - C# DataGridView DefaultCellStyle.Format 不适用于具有自动生成列的 dd/MM/yyyy
- python - 将用户输入从子窗口传递到父窗口 python tkinter
- css - 使用 css 创建图标而不是使用图像
- c# - 读取包含 OLE 嵌入对象的 RTF 文件