GCMRegistrar.getRegistrationId(this)总是返回空字符串,即使在成功调用register之后也是如此

Dan*_*ord 12 android google-cloud-messaging

我正在实现GCM - 我做的第一件事是调用GCMRegistrar.getRegistrationId来查看设备是否已注册.它不是(返回空字符串),所以我对GCMRegistrar.register进行异步调用.正如所料,我的意图服务(从GCMBaseIntentService派生)获取其调用的onRegistered()方法,以及我的服务器可用于向此设备发送GCM消息的令牌.到现在为止还挺好.

但是,下次运行应用程序时,我希望首先调用GCMRegistrar.getRegistrationId来返回我在intent服务的onRegistered函数中返回的令牌.但我又得到了空字符串.我认为GCM客户端库(gcm.jar)会将GCM注册ID(令牌)保存到私有SharedPreferences对象 - 事实上,GCMRegistrar类的文档(http://developer.android.com/guide/ google/gcm/client -javadoc/com/google/android/gcm/GCMRegistrar.html)声明"注意:此类使用私有SharedPreferences对象来跟踪注册令牌"

我没有取消注册设备,卸载应用程序或更新了versionCode.我缺少什么想法?谢谢

注意 - 此问题已在android-gcm标记下的google组中发布.网址在这里:

https://groups.google.com/forum/#!topic/android-gcm/4FPqZLzlvE4

Mark Murphy(一个Commons Guy)对这个问题的初步诊断非常有帮助,但没有任何具体的问题浮出水面

更新编辑 - 这是我的AndroidManifest.xml的相关部分

    <receiver android:name=".push.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.myapp.package.name" />
        </intent-filter>
    </receiver>

    <service android:name=".push.GCMIntentService" />
Run Code Online (Sandbox Code Playgroud)

Dan*_*ord 0

我仔细检查了 AndroidManifest 以确保我们的服务定义正确,确实如此。最后我采用了一种技巧,其中涉及写入共享首选项。