【问题标题】:Firebase Cloud Trigger Function - How can I send notifications to ALL users?Firebase 云触发功能 - 如何向所有用户发送通知?
【发布时间】:2018-05-19 10:39:13
【问题描述】:

我对 Firebase Cloud Functions 完全陌生(接触 2 天)。当 Firebase 数据库检测到已添加新数据时,我正在尝试向我的应用程序的所有用户发送通知。这是我目前所拥有的:

exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {

  const snapshot = event.data;
  var str = snapshot.child("name").val();
  console.log(str);

  if (snapshot.previous.val()) {
    return 0;
  }

  if (snapshot.val().name != "ADMIN") {
    return 0;
  }

  const text = snapshot.val().text;
  const payload = {
    notification: {
      title: snapshot.name,
      body: ""
    }
  }
  //return admin.messaging().sendToDevice(tokens, payload);
});

我知道代码现在处于混乱状态,这是由于来自各个教程网站的几次复制和测试。我可以从 console.log 成功获取数据的名称,但无法向所有用户发送通知。

我知道大多数使用令牌和设备 ID。但是有没有更简单的方法可以发送给我的每一位用户?我是否需要为我的应用程序添加任何 Java 代码才能使此通知正常工作?

编辑 1: 按照彼得的建议,我更新了我的功能:

exports.sendNotification = functions.database.ref("/uploads/{pushId}").onCreate(event => {

  const snapshot = event.data;
  var str = snapshot.child("name").val();
  console.log(str);

  if (snapshot.previous.val()) {
    console.log("RETURN 1");
    return 0;
  }

  const payload = {
    notification: {
      title: str,
      body: ""
    }
  }

  return admin.messaging().sendToTopic("Users", payload)
  .then(function(response){
        console.log("Notification sent ", response);
  })
  .catch(function(error){
        console.log("Error sending notification: ", error);
  });
});

我还在我的代码中添加了以下 java:

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

我现在遇到的问题是,在 Firebase 控制台上它说通知正在成功发送,但在我的手机上我没有收到任何东西。在我的情况下是否必须使用 onMessageReceived 方法?

我注意到的一件事是,每次应用启动时都会调用上述语句。这会以任何方式影响结果吗?

【问题讨论】:

标签: javascript node.js firebase firebase-cloud-messaging google-cloud-functions


【解决方案1】:

对于寻求更直接答案的人

除非您发送给目标用户,否则无法从 firebase 函数发送给所有 用户。这些将是订阅了某个主题的用户 处理函数将是

sendToTopic(topic, payload); //for topic

或者,如果您没有指定主题或发送到设备选项,您可以使用将发送给每个用户的控制台 GUI,即使没有订阅主题也是如此。

【讨论】:

    【解决方案2】:

    我认为最简单的是topics,您可以为所有用户订阅一个topic,然后向该主题发送通知。您必须将您的退货声明更改为:

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

    所以现在所有订阅topic“猫”的用户都会收到通知。当然,您也可以将主题更改为您想要的任何内容..

    要为用户订阅某个主题,您只需编写以下代码:

    FirebaseMessaging.getInstance().subscribeToTopic("Cat"); //in java code
    

    查看更多信息topic messaging

    【讨论】:

    • 听起来确实很简单。明天将尝试第一件事,这里几乎是凌晨 3 点。会及时更新!
    • 我已经尝试过您的建议,在控制台中它说通知已成功发送,但我无法在手机上收到通知。我已通过更改更新了我的问题,请查看。
    • 如果您只是从控制台发送..您不需要云功能,您只需将用户注册到主题并等待一天,以便主题出现在控制台中并发送消息,没有我不认为它会影响结果,你可以制作一个按钮,当他们点击它时,他们会收到通知..
    • 我实际上并没有从控制台发送,我正在尝试创建一个云触发器,它会在每次有人将文件上传到数据库时自动向所有用户发送通知。
    • 我发现它实际上在没有onMessageReceived的情况下工作,只是发件人无法收到通知,但其他用户会。所以,是的,愚蠢的我没有彻底检查它。非常感谢!
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2021-04-04
    • 2019-02-23
    • 2018-06-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多