【发布时间】:2016-11-09 07:19:19
【问题描述】:
我正在尝试向所有应用用户(在 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 来向所有运行该应用的设备发送消息以反映管理控制台功能?
【问题讨论】:
-
检查您使用的 api 令牌是否正确。还尝试将 GCM 消息发送到单个设备,看看是否有效。您可以通过在调试中启动应用程序并在
FirebaseInstanceIdService上放置断点来获取 InstanceId -
我没有看到“api token”出现在对 firebase.google.com/docs 的快速谷歌搜索中。您的意思是“ID 令牌”吗?还是“身份验证令牌”?还是您在谈论标题中提供的我的授权密钥?那个 很好:如果我将其更改为原来的样子,服务器响应将切换为“未经授权”,而不是我当前收到的错误消息。
-
该博客似乎是关于向特定设备发送消息,而不是像最初的讨论那样仅将消息发送给应用程序的所有用户。
-
阅读这篇博文了解更多详情 -> developine.com/…
标签: android firebase firebase-cloud-messaging firebase-notifications