首页 文章

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

提问于
浏览
43

我正在尝试向所有应用用户(在Android上)发送通知,基本上会复制通过Firebase管理控制台发送通知时发生的情况 . 这是我开始的CURL命令:

卷曲--insecure --header "Authorization: key=AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type:application/json" -d "{"通知\ ":{" Headers \ ":"注意, Headers \ ","体\ ":"注意,车身系统\ "}}" https://fcm.googleapis.com/fcm/send

这是JSON解析出来更方便你的眼睛:

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

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

就是这样,“to”这个词 . (Headers报告400)我怀疑这与我的JSON中没有“to”有关 . 人们甚至会为“去”做什么?我没有定义主题,设备没有注册任何东西 . 但是,他们仍然可以从Firebase管理面板接收通知 .

由于Firebase通知处理的惊人限制,我想尝试“仅数据”JSON包,如果您的应用程序在前台,通知将由您的处理程序处理,但如果您的应用程序在后台,则会获得由Firebase服务内部处理,永远不会传递给您的通知处理程序 . 显然,如果您通过API提交通知请求,则可以解决此问题,但仅限于仅使用数据进行通知请求 . (这会破坏使用相同消息处理iOS和Android的能力 . )在我的任何JSON中用“data”替换“notification”都没有效果 .

好吧,然后我尝试了解决方案:Firebase Java Server to send push notification to all devices在我看来"Ok, even though notifications to everyone is possible via the Admin console... it's not really possible via the 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来向运行应用程序的所有设备发送消息以镜像管理控制台功能?

6 回答

  • -1

    Firebase Notifications没有用于发送邮件的API . 幸运的是,它 Build 在Firebase Cloud 消息传递之上,它具有这样的API .

    使用Firebase Notifications和Cloud Messaging,您可以通过三种方式向设备发送所谓的下游消息:

    您会注意到无法明确发送到所有设备 . 您可以使用其中的每一个来构建此类功能 .

    要发送到主题,您的命令中会出现语法错误 . 从 /topics/ 开始识别主题 . 由于您的代码中没有,服务器会将 allDevices 解释为设备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!",
       }
    }
    
  • -5

    我想出的将推送通知发送到所有设备的最简单方法是将它们订阅到“所有”主题,然后向该主题发送通知 . 将其复制到您的主要活动中

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

    现在发送请求为

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

    这可能是低效或非标准的方式,但正如我上面提到的那样,这是最简单的方法 . 如果您有更好的方式向所有设备发送推送通知,请发布 .

    如果您不熟悉使用Firebase Cloud 消息传递教程发送推送通知 - 使用FCM推送通知,则可以按照本教程进行操作

  • 3

    一种方法是让所有用户的设备订阅主题 . 这样,当您将消息定位到特定主题时,所有设备都将获得它 . 我认为这是Firebase控制台中的通知部分的作用它 .

  • 60

    只需让登录的所有用户订阅特定主题,然后向该主题发送通知即可 .

  • 0

    您可以使用/ topics / all,但必须转到面板Firebase并进行更改

    匿名>>>>>启用

    enter image description here

  • 34

    您可以使用“/ topics / all”向所有设备发送通知

    https://fcm.googleapis.com/fcm/send
    Content-Type:application/json
    Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
    
    {
      "to": "/topics/all",
      "notification":{ "title":"Notification title", "body":"Notification body", "sound":"default", "click_action":"FCM_PLUGIN_ACTIVITY", "icon":"fcm_push_icon" },
      "data": {
        "message": "This is a Firebase Cloud Messaging Topic Message!",
       }
    }
    

相关问题