我对Android上的GCM有问题。它无法在我的一个测试设备(droid2)上执行onRegistered()
回调或返回一个好的regid,但在另一个设备(galaxy nexus)上运行得非常好。
我遵循的是基本示例here。打电话的人看起来是这样的:
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");
我的清单上写着:
<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" />
和
<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>
为什么
onRegistered()
回调不起作用?是什么导致它在一个设备上工作,而在另一个设备上却失败了?谢谢。 最佳答案
如果它可以在某些设备上工作,但不能在其他设备上工作,则需要使用以下操作之一:
在android 4.0.4之前,设备需要一个有效的google帐户才能工作。
GCM仅适用于Play Store应用程序和API 8以后的设备。
您的清单格式不正确-请使用lint进行检查!
设备/应用程序已注册,播放实现可能不再返回..先试试GCMRegistrar.unregister(this);
。
希望能有帮助!