【问题标题】:Firebase Cloud Function trigger Cloud MessengerFirebase Cloud Function 触发 Cloud Messenger
【发布时间】:2020-10-26 09:25:20
【问题描述】:

我的 index.js 中有这段代码,当我向云 Firestore 创建数据时触发,其他用户会收到通知。但它不起作用

const functions = require('firebase-functions'); const admin = require('firebase-admin');

admin.initializeApp();

const db = admin.firestore();
const fcm = admin.messaging();


exports.sendNotification = functions.firestore
    .document('donorRequests').
    onCreate(async snapshot => {
        const req = snapshot.data();
        var user = db.collection('account/{uid}').get()
        if((db.collection('accounts/{uid}/isVolunteer').get()===true)
            &&(db.collection('account/{uid}/bloodType').get()===req.bloodType)
            &&(db.collection('account/{uid}/rhesus').get()===req.rhesus)
            &&(db.collection('account/latestDonor').get()-Date.now()>54)){
            const payload = {
                "notification":{
                    title: 'Hai Pahlawan!',
                    body: 'Seseorang butuh kamu, yuk kita bantu :)',
                    clickAction: 'FLUTTER_NOTIFICATION_CLICK'
                }
            };
            return fcm.sendAll(payload);
        }
    });

【问题讨论】:

  • 函数日志中有错误信息吗? Aqil 的回答也有帮助吗?

标签: javascript firebase triggers google-cloud-functions google-cloud-datastore


【解决方案1】:

您的 Firestore 云函数触发器有很多错误。

首先,在您使用collection 时,它应该只包含一个集合名称作为字符串,并且doc 在所述集合之后包含一些文档路径。例如要从accounts 集合中获取带有uid1 的文档,是这样完成的

方法1

db.collection("accounts").doc("uid1").get()

方法2

db.doc("accounts/uid1").get()

其次,这两种方法访问一个文档,因此它们将返回一个Promise,它在文档中解析为一个DocumentSnapshot,你必须在它们前面添加一个await关键字,类似于

const record = await db.collection("accounts").doc("uid1").get();

【讨论】:

    猜你喜欢
    • 2018-06-25
    • 2022-08-16
    • 2018-05-16
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2021-08-03
    • 2018-08-09
    • 2019-12-16
    相关资源
    最近更新 更多