【问题标题】:Send notification using Cloud Functions for Firebase to specific user使用 Cloud Functions for Firebase 向特定用户发送通知
【发布时间】:2017-10-29 18:58:14
【问题描述】:

我正在使用 Cloud Functions for Firebase 向用户发送通知。我能够收到通知,但问题是每个人都收到通知,我正在尝试将通知发送给特定用户。我将用户的设备 ID 保存在 Firebase 的数据库中,然后向那个特定的人发送通知。这是我的代码:

保存用户的数据,这实际上工作正常:

DatabaseReference root = FirebaseDatabase.getInstance().getReference();
            DatabaseReference groupsRef = root.child("users").child(Settings.Secure
            .getString(ctx.getContentResolver(), Settings.Secure.ANDROID_ID));
            groupsRef.child("isLogin").setValue(2);

在订阅主题的第一个活动中:

FirebaseMessaging.getInstance().subscribeToTopic("android");

最后是 javascript 代码(我对此知之甚少):

var functions = require('firebase-functions');
var admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/users')
    .onWrite(event => {

    var eventSnapshot = event.data;
    var str = "This is notification"
    console.log(str);

    var topic = "android";
    var payload = {
        data: {
            isLogin: eventSnapshot.child("975af90b767584c5").child("isLogin").val()
        }
    };

    return admin.messaging().sendToTopic(topic, payload)
        .then(function (response) {
            // See the MessagingTopicResponse reference documentation for the
            // contents of response.
            console.log("Successfully sent message:", response);
        })
        .catch(function (error) {
            console.log("Error sending message:", error);
        });
    });

在这里,我想发送设备 ID,而不是现在硬编码的“975af90b767584c5”,我不知道如何在 javascript 中执行此操作。或者如果有其他方法。

感谢任何帮助,谢谢。

【问题讨论】:

  • 您必须将通知发送到设备 TOKEN 而不是 ID
  • @DivyeshPatel 如何在 javascript 中做到这一点?对不起,我不太懂js
  • 当用户在应用中注册时,您必须将设备令牌保存在数据库中,然后从数据库中获取该令牌(其中 userid=?)并向该令牌发送通知。
  • 而您目前正在向主题(android)发送通知,这就是为什么每个人都会收到通知
  • 好的,所以我将保存设备令牌而不是设备 ID。但是我必须在 js 中做些什么改变呢?我还是有点迷茫

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


【解决方案1】:

首先在app中,通过

获取User FCM token
String Token = FirebaseInstanceId.getInstance().getToken();

现在,将此令牌发送到您的服务器并将其与其他用户详细信息一起保存在数据库中。

然后,当您想向特定用途发送通知时,通过用户 ID 或其他方式从数据库中获取该用户的 FCM 令牌。如果您想向多个用户发送通知,则从数据库中获取多个用户 FCM 令牌并将其放入 arrayList .

现在对于主要部分,使用您的 KEY 调用 fcm 端点,通知内容 最重要的是:令牌或令牌数组。

在你的情况下,不要使用 sendToTopic,使用 send to: Token/Array

您可以在谷歌上搜索 java 脚本语法,但这是主要逻辑。更多信息: https://firebase.google.com/docs/cloud-messaging/admin/send-messages

【讨论】:

    猜你喜欢
    • 2017-10-08
    • 2017-11-16
    • 2020-05-26
    • 2021-03-18
    • 2020-05-11
    • 2018-02-22
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多