我正在尝试向所有应用程序用户(在 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"
}
}
返回的响应只有两个字符:
至
就是这样,“到”这个词。(标题报告 400)我怀疑这与我的 JSON 中没有“to”有关。一个“到”甚至会放什么?我没有定义任何主题,设备也没有注册任何东西。然而,他们仍然能够接收来自 Firebase 管理面板的通知。
由于 Firebase 通知处理的惊人限制,我想尝试一个“仅数据”的 JSON 包,如果您的应用程序在前台,通知将由您的处理程序处理,但如果您的应用程序在后台,它会得到由 Firebase 服务在内部处理,并且从未传递给您的通知处理程序。显然,如果您通过 API 提交通知请求,则可以解决此问题,但前提是您仅使用数据执行此操作。(这会破坏使用相同消息处理 iOS 和 Android 的能力。)在我的任何 JSON 中用“数据”替换“通知”都没有效果。
好的,然后我在这里尝试了解决方案: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一个带有“InvalidRegistration”的 200 代码意味着注册令牌有问题. 也许?因为那部分文档是针对消息服务器的。通知服务器是否相同?不清楚。我在其他地方看到该主题可能需要几个小时才能激活。看起来这对于创建新的聊天室来说毫无用处,所以这似乎也很不对劲。
当我可以从头开始编写一个应用程序,并在几个小时内收到通知时,我感到非常兴奋,而我以前从未使用过 Firebase。在达到 Stripe.com 文档的水平之前,它似乎还有很长的路要走。
底线:有谁知道提供什么 JSON 来向所有运行应用程序的设备发送消息以反映管理控制台功能?