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 读取任何内容的部分原因。