尝试在 Android 上从 C2DM 迁移到 GCM 服务。
面临一个问题。发送注册意图时,我启动了以下服务:
- 在版本。2.3.5 - 'Could to Device Messaging' 和 'Google Messaging Service'
- 在版本。4.0.4 - '谷歌消息服务'
- 在版本。2.3.3 -“云到设备消息”和“谷歌消息服务”
使用真实设备
尝试使用以下代码:
Intent registrationIntent = new Intent(
"com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app",
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
registrationIntent.putExtra("sender", SENDER_ID_NUMBER);
this.context.startService(registrationIntent);
和
GCMRegistrar.checkDevice(context);
GCMRegistrar.checkManifest(context);
final String regId = GCMRegistrar.getRegistrationId(context);
if (regId.equals("")) {
GCMRegistrar.register(this.context, SENDER_ID_NUMBER);
} else {
Log.v("gcm_registration", "Already registered");
}
编辑: 设置本地服务器并使用 Google gcm 的模拟后,我发现:
- 在版本。2.3.5 - 我没有收到 gcm 消息
- 在版本。4.0.4 - 我收到 gcm 消息
- 在版本。2.3.3 - 我收到 gcm 消息
EDIT2:
经过更多测试后,我发现以下内容:正如我上面描述的关于哪个版本的Android OS运行哪个服务,所以如果我重新启动手机并打开网络,这些服务就会启动现在,如果我关闭所有(停止)手机上的谷歌服务并发送注册意图:com.google.android.c2dm.intent.REGISTER
,然后:
- 在版本。2.3.5 - 'Could to Device Messaging' 启动
- 在版本。4.0.4 - “谷歌消息服务”已启动
- 在版本。2.3.3 - “云到设备消息”已启动
这使得无法向那些启动“云到设备消息传递”的设备发送通知。
问题:
这是否意味着我的应用程序必须同时支持 C2DM 和 GCM?
简而言之,为什么会发生这种情况以及如何避免这种行为?
为什么 Google Services 会针对 GCM 注册意图推出不同的服务?