Firebase云触发功能 - 如何向所有用户发送通知?

问题描述 投票:2回答:2

我对Firebase云功能完全陌生(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方法?

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

android firebase firebase-cloud-messaging google-cloud-functions
2个回答
1
投票

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

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

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

要为用户订阅主题,您需要做的就是写下:

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

检查这个以获取更多信息topic messaging


0
投票

对于寻求更直接答案的人

除非您要发送给目标用户,否则无法从firebase功能发送给所有用户。这些将是订阅某个主题的用户。正在进行的功能将是

sendToTopic(topic, payload); //for topic

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.