GCM Android:未调用onRegistered()

gcl*_*cl1 4 notifications android google-cloud-messaging

我在Android上遇到GCM问题.它无法onRegistered()在我的一个测试设备(Droid2)上执行回调或返回一个好的regId - 但它在另一个设备(Galaxy Nexus)上运行得非常好.

我在这里遵循基本的例子.调用者看起来像这样:

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

final String regId = GCMRegistrar.getRegistrationId(this);

if (regId.equals(""))
    GCMRegistrar.register(this, Constants.SENDER_ID);
else
    Log.v(TAG, "Already registered");
Run Code Online (Sandbox Code Playgroud)

我的清单有这样的:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

和

<receiver
    android:name="com.google.android.gcm.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.gcl.myapp" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

为什么onRegistered()回调不起作用?什么可能导致它在一个设备上工作,但在另一个设备上失败?谢谢.

Chr*_*ins 5

如果它适用于某些设备但不适用于其他设备,则可以使用以下某项设备:

  • 在Android 4.0.4之前,该设备需要有效的Google帐户才能运行.
  • GCM仅适用于具有Play商店应用和API 8的设备.
  • 您的清单格式错误 - 使用Lint检查!
  • 设备/应用程序已经注册,Play实现可能不会再次返回..请先尝试GCMRegistrar.unregister(this);.

希望有所帮助!