首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后台服务从C2DM迁移到GCM

后台服务从C2DM迁移到GCM
EN

Stack Overflow用户
提问于 2013-11-21 23:50:43
回答 2查看 292关注 0票数 1

我的应用程序中有一个后台服务,目前使用的是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服务的文档似乎有点少,并且没有解决它在后台服务中的使用。

亲切的问候

EN

回答 2

Stack Overflow用户

发布于 2013-11-21 23:54:08

不确定推荐的迁移路径是什么,但这里有一个适合我的方法:Registration confusion Android GCM

票数 0
EN

Stack Overflow用户

发布于 2013-11-22 00:33:42

文档中示例中的代码应该足以检查Play Services:

代码语言:javascript
复制
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()方法。你没必要这么做。如果你有一个错误,那么可以,例如,从你的服务发送一条消息到主活动,指示用户尝试并更新他们的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20125566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档