发送消息到GCM设备的正确URL是什么?

4
GCM的文档中说,应用服务器应使用https://gcm-http.googleapis.com/cloud-messaging/send向GCM设备发送消息,但是示例程序(在GcmSender类中)使用https://android.googleapis.com/gcm/send。哪一个是正确的呢? 我已经在现场使用了一个使用后者URL的GCM应用程序几年了,客户端使用旧的类,而不是当前文档化的类。我想这意味着我的实现是C2DM而不是GCM,但是上述URL不一致使我有点不确定。除了URL之外,我的应用程序服务器实现与今天记录的内容匹配,例如,它使用这个格式向GCM设备发送消息: Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA{ "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", "data" : { ... },} 这也很奇怪 - 示例应用程序使用“to”,而我的应用程序使用“registration_ids”。此外,我的应用程序服务器从未使用文档让我相信所有C2DM应用程序都使用的“ClientLogin Auth token”。这增加了我的困惑,使我不确定我的实现是C2DM还是GCM,因此它是否会在2015年10月20日停止工作或继续工作。 有人能澄清吗?谢谢,马克
1个回答

4

目标网址

看起来这是一个经典案例,即示例代码没有跟上API的最新发展。这在Google经常发生。

https://gcm-http.googleapis.com/gcm/send 是通过HTTP发送消息的正确网址。据我所知,https://gcm-http.googleapis.com/cloud-messaging/send 是错误的。

https://android.googleapis.com/gcm/send 用于以前的版本,但仍然有效。

to 和 registration_ids

当您想向单个收件人发送消息时,应使用 to 字段。当您想为一个或多个收件人发送消息时,应使用 registration_ids 字段。因此,对于只发送给一个人,两者都可以使用。但后者希望输入为数组。

如果您一次只向一个收件人发送消息,则使用XMPP可能更高效。XMPP还具有从设备接收消息的额外好处。


谢谢 - 这澄清了URL问题。因此,总结一下,文档中的URL可能是错误的(应该是https://gcm-http.googleapis.com/gcm/send),但示例代码使用的仍然是一个有效的URL,该URL是为以前的版本(GCM或C2DM的)引入的。不过,这仍然让我想知道我的实现是C2DM还是GCM。 - Mark Peters
如果您能够注册设备,则使用GCM,因为C2DM不再接受新的注册。 - e4c5
是的,我能够注册一个新设备。我猜GCM仍然与旧的客户端类兼容(例如GCMBaseIntentService、GCMRegistrar等)。 - Mark Peters
正确,但是这些类已被弃用,因此您可能需要为应用程序的下一个版本进行更改。在https://developers.google.com/cloud-messaging/上有迁移指南。 - e4c5
是的,正是在开始迁移时我发现了这一切。这意味着我的应用服务器不会在10/20出现故障,并且除了更改应用服务器GCM端点URL(不是必须的),不需要进行任何更改。 - Mark Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接