【问题标题】:Is there cloud functions that trigger if database changes and send notification to users subscriber to 'topics'是否有云功能触发数据库更改并向用户订阅“主题”发送通知
【发布时间】:2019-01-23 10:56:35
【问题描述】:

我正在为我的大学小项目开发一个 android 应用程序项目。一切正常,但现在我想添加一个通知功能,即每当管理员发布通知时,该主题的每个用户订阅者都会收到通知,我尝试遵循不同的教程和文档,但由于我在 js/nodejs/php 中没有编程背景我无法理解云功能。 任何人都可以编写函数或引导我找到答案吗?

我希望在 /Notice 中添加新通知时触发该功能,并向所有订阅通知的用户发送通知..

经过一番研究,我写了以下代码,

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotices = 
functions.database.ref('/Notices/{nID}').onCreate((event) => {const data = 
event.data;
if(!data.changed()){
    console.log('Nothing changed');
    return;
}else{
    console.log(data.val());
}

const payLoad = {
    notification:{
        title: 'Message received',
        body: 'You received a new message',
        sound: "default"
    }
};

const options = {
    priority: "high",
    timeToLive: 60*60*2
};

return admin.messaging().sendToTopic("bctb", payLoad, options);});

在firebase的控制台中出现错误,我在这里做错了什么, TypeError:无法读取未定义的属性“已更改” 在exports.sendNotices.functions.database.ref.onCreate (/user_code/index.js:8:13) 在 cloudFunctionNewSignature (/user_code/node_modules/firebase- 函数/lib/cloud-functions.js:105:23) 在 cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud- 函数.js:135:20) 在 /var/tmp/worker/worker.js:770:24 在 process._tickDomainCallback (internal/process/next_tick.js:135:7)

【问题讨论】:

  • Cloud Functions 的整体理念是您可以自己创建此类功能。如果您是 JavaScript 新手,Cloud Functions for Firebase 并不是学习它的最佳方式。我建议先阅读Firebase documentation for Web developers 和/或阅读Firebase codelab for Web developer。它们涵盖了许多基本的 JavaScript、Web 和 Firebase 交互。完成这些之后,您将能够更好地为 Cloud Functions 编写代码。

标签: firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

由于您不熟悉 Firebase Cloud Functions,我建议您先阅读官方文档 here,因为如果不阅读基础知识,您将无法了解它们的工作原理,然后再阅读 Firebase Cloud Messaging (FCM)文档here。一旦您了解了这两种服务的工作原理,您就会更容易理解和编写自己的云功能。为了您的方便,这里是您的功能应该是什么样的。

您可以通过简单地创建一个onCreate 触发器函数来做到这一点。所以它看起来像:

exports.SendNotification = functions.database.ref('/Notice/{nid}')
.onCreate((snapshot, context) => {
    //Your notification code here
 }

这里nid是刚刚创建的通知ID。 Firebase 会自动得到这个id。对于发送通知,您可以使用 Firebase 云消息传递 (FCM)。在此云功能中,您可以创建通知负载。

//send notification 
    const payload = {
      data:{
        title: "New notice has been added!",
     }
};

现在您可以使用以下方式将此通知发送到应用程序:

admin.messaging().sendToDevice(instID, payload);

这里,instID 是实例 ID。安装的每个应用程序都有一个唯一的实例 ID。要发送到多个设备,您必须将上面的代码行包装在一个循环中,以向所有订阅用户发送通知。为此,您需要所有订阅用户的实例 ID。

“我听到了,我忘记了,我看到了,我记住了,我做了,我明白了”

祝你好运。

【讨论】:

  • 嘿,所以我阅读了文档,看到了一些关于云函数的示例,并以您的代码作为参考,我编写了以下代码,
  • 代码中存在拼写错误,即我写的不是“某事”,而是“某事”。感谢您的帮助:)
猜你喜欢
  • 2018-05-19
  • 1970-01-01
  • 2018-08-05
  • 2021-12-29
  • 2021-08-21
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多