使用云功能将FCM发送到所有Android设备

时间:2017-04-23 10:14:24

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

尝试了解使用云功能发送Firebase云消息的过程,以通知在手机上安装了我的应用的所有用户。只要在特定分支上添加了新事件,就会触发,如下所示:

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

const payload = {
  notification: {
    title: 'New event added'
  }
};

exports.bookingsChanged = functions.database.ref("/Events")
  .onWrite(event => {
    return admin.messaging().sendToDeviceGroup("latest_events", payload);
  });

我上传的上述功能似乎并未将消息发送到我正在使用的Android设备,尽管使用Firebase控制台选项设置和测试FCM来发送消息。我注意到目前这方面的文档很少,所以非常感谢任何帮助!

修改

我可能已经错过了这个,但我已经用我认为必需的Android应用程序包名称替换了字符串' latest_events ',根据控制台定位'用户细分'

1 个答案:

答案 0 :(得分:1)

等待我设置的主题出现在Firebase Notifications信息中心中,以解决此问题。然后我更改了以下代码以直接发送到此主题:

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

我还发现在遇到API文档后,你必须在使用'sendToDevicegroup'时提供一个令牌。因此,在我的用例中主题更有效,因为我不希望获取令牌发送到特定用户设备。

希望这可以帮助遇到类似问题的人!

其他编辑

如果像我一样,您想仅提醒用户已添加到特定分支的新事件,通常包括推送ID,我已创建以下代码来实现此目的。

在文档中的示例的帮助下,这将评估该位置与先前位置相比的记录数。因此,这只会提醒用户添加的新子记录,而不是每次编辑和删除记录时。

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

exports.bookingsChanged = functions.database.ref("/Bookings").onWrite(event 
    => {

    var payload = {
        notification: {
            title: "A new event has been added!"
        }
    };

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

});