GCM Android: onRegistered () не называется

У меня проблема с GCM на Android. Он не может выполнить onRegistered() вызов onRegistered() или когда-либо возвращать хороший regId на одном из моих тестовых устройств (Droid2), но он отлично работает на другом устройстве (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"); 

И мой манифест имеет это:

 <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() обратный вызов onRegistered() ? И что может заставить его работать на одном устройстве, но терпеть неудачу на другом? Благодарю.

Если он работает на некоторых устройствах, но не в других, это связано с одним из следующих:

  • Перед Android 4.0.4 для работы устройства требуется действительная учетная запись google.
  • GCM работает только на устройствах с Play Store App и API 8 и далее.
  • Ваш манифест плохо отформатирован – используйте Lint для проверки!
  • Устройство / приложение уже зарегистрировано, реализация Play не может вернуться снова. Попробуйте GCMRegistrar.unregister(this); первый.

Надеюсь, это поможет!

У меня такая же проблема. Если вы используете AngularJS + IonicFramework, вам не нужно это делать:

После создания фабрики с помощью функции onDeviceReady создается функция onNotificationGCM. Что-то вроде этого:

 app.factory('PushProcessingService', function () { .. }); function onNotificationGCM(e) { } 

Я создавал onNotificationGCM внутри моей фабрики. Это решает мою проблему.