当前位置: 首页 > 知识库问答 >
问题:

Firebase Cloud Function触发Cloud Messenger

贺飞
2023-03-14

我的索引中有这个代码。当我向云firestore创建数据时,其他用户会收到一个通知。但这不是工作

const函数=需要('Firebase函数'); const admin=需要('Firebase管理');

管理初始化EAPP();

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);
        }
    });

共有1个答案

许博易
2023-03-14

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

首先,在使用collection时,它应该仅以字符串形式保存一个集合名称,doc在所述集合之后包含一些文档路径。例如,要从accounts集合中获取具有uid1的文档,操作如下

方法1

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

方法二

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

其次,这两个方法访问一个文档,这样他们就会返回一个Promise,它会解析为留档中的DocumentSnapshot,并且您必须在它们前面添加一个wait关键字,类似于

const record = await db.collection("accounts").doc("uid1").get();
 类似资料:
  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • Apex触发器类似于在特定事件发生时执行的存储过程。 在记录事件发生之前和之后执行触发器。 语法 (Syntax) trigger triggerName on ObjectName (trigger_events) { Trigger_code_block } 执行触发器 以下是我们可以触发的事件 - insert update delete merge upsert undelete 触发示

  • 本文向大家介绍MySQL触发器 Update触发Insert失败,包括了MySQL触发器 Update触发Insert失败的使用技巧和注意事项,需要的朋友参考一下 今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表 于是进行测试 执行触发器语句,报错,报错内容如下: 分析,由于访问工具HediSQL,导致无法正常创建触发器,相同语句,

  • 边缘触发是指每当状态变化时发生一个 io 事件,条件触发是只要满足条件就发生一个 io 事件

  • 我想用quartz scheduler使用jdbc数据存储立即执行作业~。然而,即使我使用now()或调用triggerjob进行调度,在调度和触发器fire之间也有20-30秒的延迟。 我尝试用一个简单的触发器执行作业: 并且我还尝试用调度程序触发: 下面是显示延迟的侦听器日志。

  • 主要内容:语法,实例,列出触发器(TRIGGERS),删除触发器(TRIGGERS)SQLite 触发器(Trigger)是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于 SQLite 的触发器(Trigger)的要点: SQLite 的触发器(Trigger)可以指定在特定的数据库表发生 DELETE、INSERT 或 UPDATE 时触发,或在一个或多个指定表的列发生更新时触发。 SQLite 只支持 FOR EACH ROW 触发器(Trigger

  • PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。 下面是关于 PostgreSQL 触发器几个比较重要的点: PostgreSQL 触发器可以在下面几种情况下触发: 在执行操作之前(在检查约束并尝试插入、更新或删除之前)。 在执行操作之后(在检查约束并插入、更新或删除完成之后)。 更新操作(在对一个视图进行插入、更新、删除时)。 触发器的 FOR EAC

  • 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。 因此触发器不需要人为的去调用,也不能调用。触发器的触发条件其实在定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器和行级触发器。 触发器的基础知识和示例: Oracle之前插入触发器 - https://www.xnip.cn/oracle/before_insert.html Oracle之后插