Registro de GCM: SERVICIO NO DISPONIBLE en la red móvil

Estoy recibiendo el SERVICIO NO DISPONIBLE durante el registro de GCM.

Comportamiento extraño es que el código funciona bien cuando el dispositivo está en Wifi. Falla casi siempre (90% veces) cuando está en la red móvil.

Internet en datos móviles está funcionando bien, y otras operaciones de servidor están funcionando, aunque son un poco más lento en comparación con Wifi.

Traté de añadir un bucle simple (no exponencial esperar) para seguir intentando después de un intervalo de sueño, pero no hay suerte.

Momento de conmutar Wifi en la operación (GCM registro) tiene éxito.

Por favor ayuda.

**** Actualización Más información ** **: He probado la demostración GCM en mi dispositivo y también tiene el mismo problema. No funciona en los datos móviles, funciona bien en Wifi. El dispositivo donde está fallando es la Nota 3, la versión de destino es 4.4.2. Extrañamente mismo código funciona bien en otro dispositivo (versión 2.3.6)

Registro de GCM

try { String sDeviceID=null; if (checkPlayServices()) { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); sDeviceID = getRegistrationId(context); if (sDeviceID==null) { for(int i=0;i<60;i++){ try{ sDeviceID= gcm.register(SENDER_ID); break; }catch(IOException e){ Thread.sleep(2000); continue; } } // Persist the regID - no need to register again. storeRegistrationId(context, sDeviceID); } sDeviceID = getRegistrationId(context); if (sDeviceID==null) { error=true; throw new Exception("GCM Error"); } 

XML de manifiesto

  <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <!-- Receives the registration id. --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.planetapp.schoolink" /> </intent-filter> </receiver> <service android:name="com.planetapp.schoolink.GCMIntentService" /> 

Receptor de radiodifusión

 public class GCMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("++++++++++++ON RECEIVE"); String regId = intent.getExtras().getString("registration_id"); if(regId != null && !regId.equals("")) { /* Do what ever you want with the regId eg. send it to your server */ System.out.println("++++++++++++ID RECEIVED++++++++++++"+regId); } } 

}

OP resolvió su problema y escribió la solución en el comentario. Solución:

Issue resolved. On my mobile, "Google Services" had setting "Restrict background data" checked. This was the reason why "Google Services Framework" or "Google Play Services" was not available when Wifi was turned off. Once I removed the restriction, I started working fine !

Ir a la configuración

Busque el uso de datos

Introduzca aquí la descripción de la imagen

Busque "Servicios de Google Play"

Introduzca aquí la descripción de la imagen

Cuando ingresa a otra pantalla:

  1. Menú
  2. Restringir BackgroundData (Comprobar si está marcado y desmarcarlo.)

Introduzca aquí la descripción de la imagen

Si utiliza amulator android, el servicio no estará disponible

  • Error de IntentReceiver filtrado al llamar a GCMRegistrar.register ()
  • Com.google.android.c2dm.intent.REGISTRATION está desaconsejado?
  • Uso de GCM en el estudio de Android
  • Android: mensajes de alta prioridad con la mensajería en la nube de google (con corona sdk)
  • ¿Cómo comprobar si los usuarios de cuenta de google se ha añadido en el dispositivo antes de iniciar el procedimiento de GCM?
  • Cómo verificar el ID del remitente de GCM de deviceToken en Parse.com
  • ¿Un GCM-App realmente necesita un wakelock?
  • Dirección IP del servidor de mensajería de Google Cloud
  • La intención del receptor de mensajes de la nube de Google no se inicia (devolución de llamada de intención de difusión: resultado = CANCELADO paraIntención)
  • Cómo romper el contenido de las notificaciones en Android
  • HttpRetryExcepiton al intentar enviar mensaje gcm
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.