我试图向所有应用用户发送通知(在Android上),基本上复制了通过Firebase管理控制台发送通知时发生的情况。这里是CURL命令我开始于:如何通过CURL向所有设备发送Firebase通知?
curl --insecure --header“Authorization:key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM”--header“Content-Type:application/json”-d“{\”notification \“:\”title \“,\”body \“:\”note-Body \“}}”https://fcm.googleapis.com/fcm/send
这是JSON解析出来让您的眼睛更容易:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
该回来的反应就是两个字:
到
就是这样,单词“到”。 (Headers报告400)我怀疑这与在我的JSON中没有“to”有关。甚至会给一个“to”什么?我没有定义任何主题,并且设备没有注册任何内容。但是,他们仍然能够从Firebase管理控制台收到通知。
由于Firebase通知处理的惊人限制,因此如果您的应用处于前台,通知将由您的处理程序处理,但我想尝试“仅限数据”JSON包,但如果您的应用处于背景,它将通过Firebase服务进行INTERNALLY处理,并且永远不会传递给您的通知处理程序。显然,如果你通过API提交你的通知请求,但只有在你使用纯数据的情况下才可以解决这个问题。 (然后就会破坏使用相同消息处理iOS和Android的能力。)在我的任何JSON中将“notification”替换为“data”不起作用。
好了,然后我试图这里的解决方案:Firebase Java Server to send push notification to all devices 这似乎是我说“好吧,即使通知大家通过管理控制台是可能的...这不是真的有可能通过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来发送消息到所有运行应用程序的设备来镜像管理控制台功能?
检查是否使用正确您的API凭证推送通知您可以按照本教程。也尝试发送GCM消息到单个设备,看看是否有效。您可以通过在调试中启动应用程序来获取InstanceId,并在“FirebaseInstanceIdService”上放置一个断点。 –
我没有看到在firebase.google.com/docs的快速谷歌搜索中显示的“api标记”。你的意思是“ID令牌”?或“身份验证令牌”?或者你是在谈论头部提供的我的授权密钥?这一点很好:如果我改变它,服务器响应切换到“未授权”,而不是我正在获取的错误消息。 – Anders8
该博客似乎是关于向特定设备发送消息,而不是像原始讨论一样,只是将其发送给应用的所有用户。 – Anders8