我正在尝试向所有应用程序用户发送通知(在Android上),实际上是在重复通过Firebase管理控制台发送通知时发生的情况。这是我开始的CURL命令:
curl --insecure --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”有关。人们甚至会为“到”做些什么?我没有定义主题,设备还没有注册任何东西。但是,他们仍然能够从Firebase管理面板接收通知。
由于Firebase通知处理的惊人局限性,我想尝试“仅数据” JSON包,即如果您的应用程序位于前台,则通知将由您的处理程序处理,但是如果您的应用程序位于后台,则它将得到由Firebase服务内部处理,并且从未传递给您的通知处理程序。显然,如果您通过API提交了通知请求,则可以解决此问题,但是仅当您仅使用数据时才可以解决。(这将破坏用同一条消息处理iOS和Android的能力。)在我的任何JSON中用“数据”替换“通知”均无效。
好的,然后我在这里尝试解决方案:Firebase Java Server将推送通知发送到所有设备 ,在我看来,这是“尽管可以通过管理控制台向所有人进行通知,但实际上不可能通过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,一个200代码带有“ InvalidRegistration”意味着注册令牌存在问题。也许?因为该文档的那一部分是针对消息传递服务器的。通知服务器是否相同?不清楚 我在其他地方看到该主题可能需要花费几个小时才能生效。似乎这样会使创建新的聊天室变得毫无用处,所以看起来也是如此。
当我能够从头开始编写一个应用程序时,我感到非常兴奋,而在以前从未使用过Firebase的情况下,短短几个小时就收到了通知。看来要达到Stripe.com文档的水平还有很长的路要走。
底线:有谁知道提供什么JSON来向运行该应用程序的所有设备发送消息以镜像管理控制台功能?
FirebaseInstanceIdService