Node.js 使用Firebase云功能向特定用户发送通知
我在我的firebase群组聊天应用程序中使用firebase cloud功能,设置已经完成,但问题是当某个群组中有人发送消息时,所有用户都会收到该消息的通知,包括该群组的非成员 我只想向特定于组的用户发送通知,下面是我的firebase云功能代码-Node.js 使用Firebase云功能向特定用户发送通知,node.js,firebase,firebase-realtime-database,google-cloud-functions,firebase-cloud-messaging,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,Firebase Cloud Messaging,我在我的firebase群组聊天应用程序中使用firebase cloud功能,设置已经完成,但问题是当某个群组中有人发送消息时,所有用户都会收到该消息的通知,包括该群组的非成员 我只想向特定于组的用户发送通知,下面是我的firebase云功能代码- const functions = require('firebase-functions'); const admin = require('firebase-admin'); const _ = require('lodash'); admi
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const _ = require('lodash');
admin.initializeApp(functions.config().firebase);
exports.sendNewMessageNotification = functions.database.ref('/{pushId}').onWrite(event => {
const getValuePromise = admin.database()
.ref('messages')
.orderByKey()
.limitToLast(1)
.once('value');
return getValuePromise.then(snapshot => {
const { text, author } = _.values(snapshot.val())[0];
const payload = {
notification: {
title: text,
body: author,
icon: ''
}
};
return admin.messaging()
.sendToTopic('my-groupchat', payload);
});
});
如果有人能就此提出建议,这将非常有帮助。根据我们关于评论的对话,我认为问题在于您使用的主题包含所有用户,这就是
我的groupchat
主题。解决方案是与属于此子主题的用户创建一个新主题
至于如何创建这样的主题,这里有几个例子,在这里您可以看到您可以在服务器端或客户端完成。在您的情况下,您可以遵循服务器端的示例,因为您需要批量添加这些示例,但随着新用户的添加,实施客户端方法可能会很有趣。根据我们关于评论的对话,我相信问题在于您使用的主题包含所有用户,这是我的群组聊天主题。解决方案是与属于此子主题的用户创建一个新主题
至于如何创建这样的主题,这里有几个例子,在这里您可以看到您可以在服务器端或客户端完成。在您的案例中,您可以遵循服务器端的示例,因为您需要批量添加它们,但随着新用户的添加,实现客户端方法可能会很有趣。代码看起来是正确的,因此我假设问题在于您订阅主题成员的方式,你能分享一下你是如何订阅这个主题的成员的吗?在我的代码中,我只传递{pushId},所以当对数据库执行任何写操作时,它会生成通知,但是,当在组中执行写入操作并且用户是该组的成员时,我希望收到通知。
my groupchat
是您希望共享消息的用户或整个用户组所在的主题的名称吗?如果是后者,则必须创建一个单独的主题并向其订阅成员,以便只有在收到该主题后才能接收该主题。数据库中的整个用户组,但不是所有用户,只有发起消息的组成员。那么,我如何通过云功能(动态创建的组)订阅每个组呢。在您的例子中,您可以按照服务器端的示例进行操作,因为您需要批量添加它们。让我知道这是否有帮助。代码看起来是正确的,所以我假设问题在于您订阅主题成员的方式,您可以分享您订阅主题成员的方式吗?在我的代码中,我只传递{pushId},因此在对数据库执行任何写操作时,它会生成通知,但是,当在组中执行写入操作并且用户是该组的成员时,我希望收到通知。my groupchat
是您希望共享消息的用户或整个用户组所在的主题的名称吗?如果是后者,则必须创建一个单独的主题并向其订阅成员,以便只有在收到该主题后才能接收该主题。数据库中的整个用户组,但不是所有用户,只有发起消息的组成员。那么,我如何通过云功能(动态创建的组)订阅每个组呢。在您的例子中,您可以按照服务器端的示例进行操作,因为您需要批量添加它们。让我知道这是否有帮助。