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

如何通过curl向所有设备发送Firebase通知?

高宏峻
2023-03-14

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/send

下面是JSON解析出来的,以便于您的眼睛查看:

{
"notification":{
    "title":"note-Title",
    "body":"note-Body"
    }
}

返回的响应只有两个字符:

就是这样,“to"这个词。(标题报告为400)我怀疑这与我的JSON中没有“to”有关。一个“to”会是什么意思呢?我没有定义主题,设备也没有为任何东西注册自己。然而,他们仍然能够接收来自Firebase管理面板的通知。

由于Firebase通知处理的惊人限制,我想尝试一个“只提供数据”的JSON包,如果您的应用程序在前台,通知由您的处理程序处理,但是如果您的应用程序在后台,它由Firebase服务在内部处理,并且从不传递给您的通知处理程序。显然,如果您通过API提交通知请求,这是可以解决的,但前提是您只使用数据。(这就破坏了用同样的消息处理iOS和Android的能力。)在我的任何JSON中用“数据”替换“通知”都没有效果。

好的,然后我尝试了这里的解决方案:Firebase Java服务器发送推送通知到所有设备,这在我看来似乎是说“好的,即使通知到每个人都可以通过管理控制台。。。这是不可能通过api.”解决方法是让每个客户机订阅一个主题,然后将通知推送到该主题。所以首先在oncreate中的代码:

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

然后我发送的新JSON:

{
"notification":{
    "title":"note-Title",
    "body":"note-Body"
    },
"to":"allDevices"
}

所以现在我至少从服务器得到了真正的回应。JSON响应:

{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
    [
    {
    "error":"InvalidRegistration"
    }
    ]
}

它附带一个HTTP代码200。好吧。。。根据https://firebase.google.com/docs/cloud-messaging/http-server-ref,带有“InvalidRegistration”的200代码表示注册令牌有问题。也许吧?因为这部分文档是针对消息传递服务器的。通知服务器是否相同?不清楚。我在其他地方看到这个话题可能要几个小时才会活跃起来。这似乎会使它无用于创建新的聊天室,所以这似乎也是一样。

当我可以从头开始编写一个应用程序,并且在几个小时内就收到通知时,我非常兴奋,而我以前从来没有使用过Firebase。在达到Stripe.com文档的水平之前,似乎还有很长的路要走。

一句话:有人知道提供什么JSON来向所有运行应用程序的设备发送消息以镜像管理控制台功能吗?

共有3个答案

林子石
2023-03-14

我想出的向所有设备发送推送通知的最简单方法是为它们订阅一个主题“所有”,然后向这个主题发送通知。把这个复制到你的主activity里

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

现在将请求发送为

{
   "to":"/topics/all",
   "data":
   {
      "title":"Your title",
      "message":"Your message"
      "image-url":"your_image_url"
   }
}

这可能是低效或非标准的方式,但正如我上面提到的,这是最简单的。请做张贴,如果你有任何更好的方法发送一个推送通知到所有的设备。

如果您是使用Firebase云消息传送教程发送推送通知的新手,可以遵循本教程-使用fcm/sub>

若要向主题的组合发送消息,请指定一个条件,该条件是指定目标主题的布尔表达式。例如,以下情况将向订阅 的设备发送消息:

{
   "data":
   {
      "title": "Your title",
      "message": "Your message"
      "image-url": "your_image_url"
   },
   "condition": "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)"
}

在FCM文档中阅读有关条件和主题的更多信息

方俊
2023-03-14

null

通过Firebase通知和云消息传递,您可以通过三种方式向设备发送所谓的下游消息:

您将注意到,没有办法显式地发送到所有设备。但是,您可以使用其中的每一个构建这样的功能,例如:在应用程序启动时为其订阅主题(例如),或者保存所有设备ID的列表,然后将消息发送给所有这些设备。

对于发送到主题,您的命令中有一个语法错误。主题以开头标识。由于您的代码中没有它,服务器将 解释为设备ID。由于它是设备注册令牌的无效格式,因此会引发错误。

从关于向主题发送消息的文档中:

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "/topics/foo-bar",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

幸弘光
2023-03-14

编辑:似乎不再支持此方法(thx至@fernandozamperin)。请看其他答案!

您可以使用 键并向不在组中的实例发送消息,而不是订阅主题。您的数据可能如下所示:

{
    "data": {
        "foo": "bar"
    },
    "condition": "!('anytopicyoudontwanttouse' in topics)"
}

null

 类似资料:
  • 我正在尝试用新的Firebase服务向我的android设备发送推送通知。我注册并安装了一个应用程序,同时我把接收通知所需的所有代码都放在了android应用程序中。通过Firebase控制台,我可以向我的应用程序发送一个通知,然后它就会被接收并显示出来。现在我想编写一个java独立服务器,向所有设备发送通知。这是我当前的代码: 这是我从他们的服务器上得到的结果: 不幸的是,简单地移除“to”标记

  • 我正在制作一个工作应用程序,目的是为Android Studio中使用Java的用户提供一个门户。我已经设置了Firebase云消息传递、身份验证和一个实时数据库来存储用户。我可以很容易地从云控制台发出推送通知,但我在想,有没有一种方法可以在不使用控制台的情况下,将推送通知发送到所有设备? 我的理由是,我不希望有人在人力资源意外删除一个用户,但我希望他们能够发送推送通知的情况,如关闭。有没有办法做

  • 我正在研究使用从旧的Google云消息传递应用程序迁移的Firebase云消息传递向项目发送消息的可能性。 旧应用程序仅使用CURL和应用程序在我的服务器上的唯一GCM API密钥从php网页向Android设备发送消息。 因此,每个android设备只需注册代码,例如: 让 Google 服务器使每台设备都可单独寻址。(注册表存储在我的服务器上的MySql数据库中,因此我知道要处理哪个设备。 A

  • 问题内容: 我正在尝试使用新的Firebase服务向我的android设备发送推送通知。我注册并设置了一个应用程序,然后将接收通知所需的所有代码都放入了android应用程序中。通过Firebase控制台,我可以将通知发送到我的应用程序,它会被接收并显示。现在,我想编写一个Java独立服务器,向所有设备发送通知。这是我当前的代码: 这就是我从他们的服务器找回来的结果: 不幸的是,简单地删除“ to

  • 在Firebase控制台中,我根据各种用户属性设置了访问群体,现在可以通过控制台向不同的用户群发送通知。有没有办法通过向fcm服务器发送http请求来实现同样的目的?“to”字段应该有一个技巧,但我想不出来。

  • 我试图弄清楚Firebase如何连接到特定设备并向其发送消息。我现在如何使用Firebase和从我的后端服务器向注册的设备发送通知,但我不知道它是如何在内部工作的。firebase服务器是否使用设备和服务器之间的持久连接?它用的是什么技术? 目前,我最感兴趣的是Android设备,以及firebase如何唤醒设备,即使有后台任务限制。