注册混乱的Android GCM

10
我正在尝试在Android中迁移到GCM,因为C2DM已被弃用。所述here的注册过程与所述here的注册不同。这两个注册是否相同?我们可以查看GCMRegistrar的代码以确保吗?
5个回答

6
我已经成功地将我的C2DM项目迁移到了GCM。测试过,工作正常。唯一的更改是:
  • 在Android应用程序中 - 在注册时更改sender的值
  • 在服务器端 - 更改auth header和URL
就与Google的交互而言,这就是全部了。根据应用程序逻辑,还有更多的更改:
  • 在Android应用程序中,注册ID存储在其首选项中。升级后,我从首选项中删除reg ID以强制重新注册,这次使用GCM。
  • 传递reg ID到服务器的逻辑获得了一个额外的布尔参数 - 如果这是C2DM或GCM reg ID
  • 发送消息的逻辑是基于这个参数进行条件判断的。
完全扔掉服务器上的C2DM逻辑是不明智的 - 并不是每个人都会升级他们的Android应用程序。旧的、启用了C2DM的版本将在一段时间内仍然被使用。因此,消息发送是有条件的 - 根据reg ID类型,它发送到GCM或C2DM。
编辑关于条件逻辑的内容:
if($RegID_Is_GCM)
{
    $Auth = GCM_Auth();
    $URL = $GCM_URL;
}
else
{
    $Auth = C2DM_AUTH();
    $URL = $C2DM_URL;
}

嗨,"发送消息的逻辑取决于所述参数"是什么意思? - Rendy

5

它们实际上是同一件事。第二个在静态方法中封装了第一个广播接收器,并注册了广播接收器。你可以将源代码附加到gcm.jar中并自行查看。您可以在~/android-sdks/extras/google/gcm/gcm-client/gcm-src.jar中找到源代码。


1
我最喜欢 GCM 的一点是我们可以从 GCM 服务器获取到RegID,它不仅仅是一个 ID,更是该设备上此应用的地址。因此这一次,您无需像在 C2DM 中那样将设备 ID 与注册 ID一起发送到服务器。
在 C2DM 中,每次请求注册 ID 都会获得一个新的 ID。
但是在 GCM 中,RegId 是通过使用您的应用程序包以及某些设备 ID生成的,因此如果您再次请求 Registration Id,则会收到相同的 RegId。 如果您卸载应用程序并重新安装它,GCM 服务器仍将为您提供相同的 Registration Id。 因此,一个 Registration Id 就足够了,无需发送任何设备 Id 到服务器。

0

GCMRegistrar只是一个助手,它执行了第一页中描述的工作。

您可以在此处查看该类。 android-sdk\extras\google\gcm\gcmclient\src\com\google\android\gcm


0

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