我在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()
回调不起作用?什么可能导致它在一个设备上工作,但在另一个设备上失败?感谢。
答案 0 :(得分:5)
如果它适用于某些设备但不适用于其他设备,那么它将与以下之一相关:
GCMRegistrar.unregister(this);
。希望有所帮助!
答案 1 :(得分:0)
我遇到了同样的问题。如果您使用的是AngularJS + IonicFramework,则不必执行此操作:
使用onDeviceReady函数创建工厂后,创建onNotificationGCM函数。像这样:
app.factory('PushProcessingService', function () {
..
});
function onNotificationGCM(e) {
}
我在工厂内创建了onNotificationGCM。这解决了我的问题。