我的应用程序中有一个后台服务,目前使用的是C2DM。我想迁移到GCM。
我可以使用2种GCM实现
1:使用gcm.jar并将C2DM电子邮件地址替换为发件人ID
2:使用Google Play服务和GoogleCloudMessaging类注册GCM
上面的选项1提供了从C2DM到GCM的最简单的迁移路径,但是,该gcm.jar已被弃用。所以我会从一种废弃的推送机制(C2DM)转向另一种(使用gcm.jar的GCM)。
选项2,要求您检查设备上的GooglePlayServices是否为最新,然后才能注册GCM。您可以通过调用GooglePlayServicesUtil.getErrorDialog() api来准备使用Google Play服务。但是,我不能从后台服务调用此api,因为它可能会导致屏幕显示给用户,这是您不应该从后台服务执行的操作。
目前,我的安卓客户端上同时有C2DM和GCM (使用Google Play服务)。我更喜欢只有GCM活动,并放弃C2DM,但如果谷歌播放服务还没有准备好在设备上使用,那么我就不能使用GCM。现在,我可能遇到这样的情况:我的后台服务没有为GCM注册,如果它继续使用C2DM,它就会被注册。
问题:
1: C2DM的Google推荐迁移路径是什么->后台服务的GCM。我是否应该使用gcm.jar方法,即使它已被弃用?
2:如果谷歌Play服务目前在设备上不可用,你是否应该退回到使用C2DM,而不是调用GooglePlayServicesUtil.getErrorDialog()?
3:在我的客户端中同时激活C2DM和GCM是不令人满意的。当我使用GoogleCloudMessaging.register(senderId)注册GCM时,广播了一条com.google.android.c2dm.intent.REGISTRATION消息,该消息被我的C2DM接收器接收。我不知道该消息是C2DM注册消息还是GCM注册消息。有没有办法区分这两个注册消息?我知道GoogleCloudMessaging.register()返回注册Id,但它也会导致广播com.google.android.c2dm.intent.REGISTRATION消息,这似乎是不必要的,并且会混淆真正的C2DM接收器。
我欢迎您对我的问题的建议/见解。围绕Google Play服务的文档似乎有点少,并且没有解决它在后台服务中的使用。
亲切的问候
发布于 2013-11-21 23:54:08
不确定推荐的迁移路径是什么,但这里有一个适合我的方法:Registration confusion Android GCM
发布于 2013-11-22 00:33:42
文档中示例中的代码应该足以检查Play Services:
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.i(GCMTAG, "This device is not supported.");
finish();
}
return false;
}
return true;
}只有当结果不是ConnectionResult.SUCCESS时,才适合调用GooglePlayServicesUtil.getErrorDialog()方法。你没必要这么做。如果你有一个错误,那么可以,例如,从你的服务发送一条消息到主活动,指示用户尝试并更新他们的版本。
https://stackoverflow.com/questions/20125566
复制相似问题