And*_*rs8 61 android firebase firebase-cloud-messaging firebase-notifications
我正在尝试向所有应用用户(在Android上)发送通知,基本上会复制通过Firebase管理控制台发送通知时发生的情况.这是我开始的CURL命令:
curl --insecure --header"授权: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"
}
}
Run Code Online (Sandbox Code Playgroud)
回复的响应只有两个字符:
至
就是这样,"to"这个词.(Headers报告400)我怀疑这与我的JSON中没有"to"有关.人们甚至会为"去"做什么?我没有定义主题,设备没有注册任何东西.但是,他们仍然可以从Firebase管理面板接收通知.
由于Firebase通知处理的惊人限制,我想尝试"仅数据"JSON包,如果您的应用程序在前台,通知将由您的处理程序处理,但如果您的应用程序在后台,则会获得由Firebase服务内部处理,并且从未传递给您的通知处理程序.显然,如果您通过API提交通知请求,则可以解决此问题,但仅限于仅使用数据进行通知请求.(这会破坏使用相同消息处理iOS和Android的能力.)在我的任何JSON中用"data"替换"notification"都没有效果.
好的,然后我在这里尝试了解决方案:Firebase Java Server向所有设备发送推送通知, 在我看来说"好吧,即使通过管理控制台向所有人发送通知......也不可能通过API. " 解决方法是让每个客户端订阅一个主题,然后将通知推送到该主题.首先是onCreate中的代码:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
Run Code Online (Sandbox Code Playgroud)
那么我发送的新JSON:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Run Code Online (Sandbox Code Playgroud)
所以现在我至少得到了服务器的真实回复.JSON响应:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这附带一个HTTP代码200.好的......根据https://firebase.google.com/docs/cloud-messaging/http-server-ref,带有"InvalidRegistration"的200代码表示注册令牌存在问题.也许?因为文档的这一部分是针对消息传递服务器的.通知服务器是否相同?不清楚.我在其他地方看到这个主题可能需要几个小时才能激活.这似乎会使创建新的聊天室变得毫无用处,所以这似乎也是如此.
当我从头开始编写应用程序时,我很兴奋,因为我以前从未使用过Firebase,只需几个小时即可收到通知.在达到Stripe.com文档的水平之前,它似乎还有很长的路要走.
一句话:有没有人知道提供什么JSON来向运行应用程序的所有设备发送消息以镜像管理控制台功能?
Fra*_*len 81
Firebase Notifications没有用于发送邮件的API.幸运的是,它建立在Firebase云消息传递之上,它具有这样的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!",
}
}
Run Code Online (Sandbox Code Playgroud)
Sye*_*fay 60
我想出的将推送通知发送到所有设备的最简单方法是将它们订阅到"所有"主题,然后向该主题发送通知.将其复制到您的主要活动中
FirebaseMessaging.getInstance().subscribeToTopic("all");
Run Code Online (Sandbox Code Playgroud)
现在发送请求为
{
"to":"/topics/all",
"data":
{
"title":"Your title",
"message":"Your message"
"image-url":"your_image_url"
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是低效或非标准的方式,但正如我上面提到的那样,这是最简单的方法.如果您有更好的方式向所有设备发送推送通知,请发布.
如果您不熟悉使用Firebase云消息传递教程发送推送通知- 使用FCM推送通知,则可以按照本教程进行操作
小智 5
代替订阅主题,您可以使用condition
密钥并将消息发送到不在组中的实例。您的数据可能看起来像这样:
{
"data": {
"foo": "bar"
},
"condition": "!('anytopicyoudontwanttouse' in topics)"
}
Run Code Online (Sandbox Code Playgroud)
请参阅https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_to_topics_2
归档时间: |
|
查看次数: |
82031 次 |
最近记录: |