使用Cloud Functions for Firebase向特定用户发送通知

时间:2017-05-29 12:50:24

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

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

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

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

这里代替现在硬编码的“975af90b767584c5”,我想发送设备ID,我不知道如何在javascript中做。或者,如果有任何其他方式。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:3)

首先在应用中,通过

获取用户FCM令牌
String Token = FirebaseInstanceId.getInstance().getToken();

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

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

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

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

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