我正在尝试向所有应用用户(在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 回答
Firebase Notifications没有用于发送邮件的API . 幸运的是,它 Build 在Firebase Cloud 消息传递之上,它具有这样的API .
使用Firebase Notifications和Cloud Messaging,您可以通过三种方式向设备发送所谓的下游消息:
to specific devices,如果您知道他们的设备ID
to groups of devices,如果您知道组的注册ID
to topics,这些只是设备可以订阅的密钥
您会注意到无法明确发送到所有设备 . 您可以使用其中的每一个来构建此类功能 .
要发送到主题,您的命令中会出现语法错误 . 从
/topics/
开始识别主题 . 由于您的代码中没有,服务器会将allDevices
解释为设备ID . 由于它是设备注册令牌的无效格式,因此会引发错误 .从有关将消息发送到主题的文档:
我想出的将推送通知发送到所有设备的最简单方法是将它们订阅到“所有”主题,然后向该主题发送通知 . 将其复制到您的主要活动中
现在发送请求为
这可能是低效或非标准的方式,但正如我上面提到的那样,这是最简单的方法 . 如果您有更好的方式向所有设备发送推送通知,请发布 .
如果您不熟悉使用Firebase Cloud 消息传递教程发送推送通知 - 使用FCM推送通知,则可以按照本教程进行操作
一种方法是让所有用户的设备订阅主题 . 这样,当您将消息定位到特定主题时,所有设备都将获得它 . 我认为这是Firebase控制台中的通知部分的作用它 .
只需让登录的所有用户订阅特定主题,然后向该主题发送通知即可 .
您可以使用/ topics / all,但必须转到面板Firebase并进行更改
匿名>>>>>启用
enter image description here
您可以使用“/ topics / all”向所有设备发送通知