Android firebase firestore&functions pushNotification 使用 fcm 令牌错误
Android firebase firestore&functions pushNotification using fcm token error
升级项目后,我整天都在研究 firebase 功能,
我想要的是将通知推送到 firestore 文档用户的令牌,
这是我的数据库结构
EX: 采集访客文档发生变化时,向文档内的token推送消息
exports.vsUp = functions.firestore.document("Visitor/{docId}").onUpdate(
(snapshot, context) => {
admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get().then(
result => {
var registrationTokens = [];
result.docs.forEach(
tokenDocument => {
registrationTokens.push(tokenDocument.data().token);
}
);
admin.messaging().sendMulticast({
tokens: registrationTokens,
notification: {
title: snapshot.data().visitor_name,
body: snapshot.data().visitor_status
}
})
}
)
}
这是我现在的 functions.js 代码,它不起作用,
怎样才能实现我想做的事情?
谢谢>3
这条线行不通:
admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get()
这里的{token}
位只是解释为文字字符串。由于没有 collection/document 具有该名称,因此您不会得到任何结果。
如果您想为请求中指定的用户加载所有令牌,它看起来像这样:
admin.firestore().collection(`Visitor/${context.params.docId}/token`).get()
所以你可以看到:
- 这里使用
`
来标记字符串,因此它被JavaScript解释为模板。您不需要在第一行执行此操作,因为当您部署 Cloud Function 时,Firebase 会自行解释这一行。
- 路径现在由三部分组成,因此它指向一个集合,而不是您代码中的四个部分,这意味着它指向一个文档。
- 我们使用
${context.params.docId}
来获取触发我们的 Cloud Function 的 docId
的值。
请注意,消息未传送到设备的原因可能有很多,但这些绝对是您的代码未从 Firestore 读取任何内容的部分原因。
升级项目后,我整天都在研究 firebase 功能, 我想要的是将通知推送到 firestore 文档用户的令牌,
这是我的数据库结构
EX: 采集访客文档发生变化时,向文档内的token推送消息
exports.vsUp = functions.firestore.document("Visitor/{docId}").onUpdate(
(snapshot, context) => {
admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get().then(
result => {
var registrationTokens = [];
result.docs.forEach(
tokenDocument => {
registrationTokens.push(tokenDocument.data().token);
}
);
admin.messaging().sendMulticast({
tokens: registrationTokens,
notification: {
title: snapshot.data().visitor_name,
body: snapshot.data().visitor_status
}
})
}
)
}
这是我现在的 functions.js 代码,它不起作用,
怎样才能实现我想做的事情? 谢谢>3
这条线行不通:
admin.firestore().collection("Visitor/{docId}/{token}/{docId}").get()
这里的{token}
位只是解释为文字字符串。由于没有 collection/document 具有该名称,因此您不会得到任何结果。
如果您想为请求中指定的用户加载所有令牌,它看起来像这样:
admin.firestore().collection(`Visitor/${context.params.docId}/token`).get()
所以你可以看到:
- 这里使用
`
来标记字符串,因此它被JavaScript解释为模板。您不需要在第一行执行此操作,因为当您部署 Cloud Function 时,Firebase 会自行解释这一行。 - 路径现在由三部分组成,因此它指向一个集合,而不是您代码中的四个部分,这意味着它指向一个文档。
- 我们使用
${context.params.docId}
来获取触发我们的 Cloud Function 的docId
的值。
请注意,消息未传送到设备的原因可能有很多,但这些绝对是您的代码未从 Firestore 读取任何内容的部分原因。