【问题标题】:Send FCM to all Android devices using Cloud Functions使用 Cloud Functions 将 FCM 发送到所有 Android 设备
【发布时间】:2017-09-20 01:21:55
【问题描述】:

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

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

尽管使用 Firebase 控制台选项设置和测试 FCM 以发送消息,但我上传的上述功能似乎根本没有向我正在使用的 Android 设备发送消息。我注意到目前几乎没有这方面的文档,所以任何帮助都将不胜感激!

编辑

我可能错过了这一点,但我已将字符串 'latest_events' 替换为我认为是必需的 Android 应用程序包名称,根据控制台定位“用户段” .

【问题讨论】:

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


    【解决方案1】:

    通过等待我设置的主题出现在 Firebase 通知仪表板中,最终解决了这个问题。然后我将以下代码更改为直接发送到该主题:

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

    【讨论】:

    • 只是指出您不必等待主题出现在通知控制台中。只要已经有一个token订阅了一个topic,就可以立即使用。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2017-04-27
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多