当前位置: 首页 > 知识库问答 >
问题:

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

沙海
2023-03-14

我完全不熟悉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:根据Peter的建议,我更新了我的功能:

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方法吗?

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

共有1个答案

闻人业
2023-03-14

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

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

因此,现在所有订阅主题的用户都将收到通知。当然,你也可以把话题改成任何你想要的。。

要向用户订阅主题,您只需编写以下内容:

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

查看更多信息主题消息

 类似资料:
  • 如何使用Firebase向我的应用程序的所有注册用户发送推送通知?我在纪录片中搜索了api,但没有找到任何有用的东西。

  • 我刚开始使用Firebase云消息。我建了一个IOS应用来接收推送通知。应用程序运行良好。我从Firebase控制台发送消息,它们会正确显示。 我的问题是:我可以向所有设备发送一条消息吗(就像我可以在控制台中做的那样)?我是的,怎么会这样? 提前道谢!

  • 我有聊天应用程序我正在使用Firebase firestore数据库,我正在保存最近的消息如下 接收者端:messages->recieverId->recent_messages 这意味着相同的消息将被写入当前用户和接收者用户文档。(同一消息将写入两个不同的文档) 消息内容如下: -接收方 现在我要观察集合,并且只向接收方用户发送通知,有什么方法可以避免向这两个用户发送推送通知吗?

  • null curl--不安全--header“Authorization:key=AIZASYBidMyAuthKeyisFinel-6NCJXJ-1JUVEM”--header“content-type:application/json”-d“notification:title:note-title.body:note-body}”https://fcm.googleapis.com/fcm/

  • 我想使用Firebase云消息服务向所有使用该应用的用户发送一些消息。我可以使用向单个或多个设备发送数据负载,如下所示: 但是如何向所有用户发送数据有效负载?