为了账号安全,请及时绑定邮箱和手机立即绑定

未收到 Firebase 功能的通知

未收到 Firebase 功能的通知

蓝山帝景 2021-08-06 10:11:24
我一直在尝试Cloud Messaging为我的应用程序实施,以便应用程序的每个用户在添加新孩子时都会自动收到通知Realtime Database.在我的文章中,MainActivity我使用此方法为每个用户订阅一个主题。FirebaseMessaging.getInstance().subscribeToTopic("latest_events").addOnSuccessListener(new OnSuccessListener<Void>() {            @Override            public void onSuccess(Void aVoid) {               // Toast.makeText(MainActivity.this, "Successfully subscribed", Toast.LENGTH_SHORT).show();            }        });我还firebase functions为我的后端安装并部署了我的 javascript 代码。索引.jsvar functions = require('firebase-functions');const admin = require('firebase-admin');admin.initializeApp(functions.config().firebase);exports.sendNotification = functions.database.ref("/Users").onWrite(event => {    var payload = {        notification: {            title: "A new user has been added!",            body: "Click to see"        }    };    if (event.data.previous.exists()) {        if (event.data.previous.numChildren() < event.data.numChildren()) {            return admin.messaging().sendToTopic("latest_events", payload);        } else {            return;        }    }    if (!event.data.exists()) {        return;    }    return admin.messaging().sendToTopic("latest_events", payload);});添加用户时,我没有收到所需的通知。似乎无法理解我做错了什么。Firebase 函数日志 CatsendNotificationTypeError: Cannot read property 'previous' of undefined at exports.sendNotification.functions.database.ref.onWrite.event (/user_code/index.js:15:19) at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:105:23) at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:135:20) at /var/tmp/worker/worker.js:730:24 at process._tickDomainCallback (internal/process/next_tick.js:135:7)
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

您使用的是 Cloud Functions for Firebase 测试版中的语法。由于它已更新到 1.0,因此语法发生了变化,您需要更新代码以匹配升级文档中所述。


将其应用于您的代码会导致如下结果:


var functions = require('firebase-functions');

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

admin.initializeApp();


exports.sendNotification = functions.database.ref("/Users").onWrite((change, context) => {


    var payload = {

        notification: {

            title: "A new user has been added!",

            body: "Click to see"


        }

    };


    if (change.before.exists()) {

        if (change.before.numChildren() < change.after.numChildren()) {

            return admin.messaging().sendToTopic("latest_events", payload);

        } else {

            return;

        }

    }


    if (!change.after.exists()) {

        return;

    }


    return admin.messaging().sendToTopic("latest_events", payload);


});

变化是:


有两个参数传递到函数中,而以前只有一个。

您不再需要将配置传递到initializeApp.

在before和after快照现在可从change。


查看完整回答
反对 回复 2021-08-06
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信