Android SDK obtiene un error NotRegistered de GCM después de unas horas

El problema

Estoy escribiendo y Android SDK que debe recibir mensajes de GCM push desde el lado del servidor SDK. Después de unas pocas horas de envío de mensajes push con éxito, el servidor GCM devuelve un error NotRegistered :

 { "multicast_id":6205350692941230304, "success":0, "failure":1, "canonical_ids":0, "results": [ { "error":"NotRegistered" } ] } 

El registrationId en el cliente no ha cambiado, y el lado del servidor se actualiza con ese token.

¿Cómo puedo solucionar el problema registrationId ? Es tener dos oyentes – uno en el SDK, uno en la aplicación – un problema?

Arquitectura

Mi SDK de Android registra una regId GCM al inicializar y envía ese identificador al servidor que admite el SDK.

La aplicación de abrazar podría (y normalmente lo hace) registrar un regId de GCM propio. El otro regId probablemente se envía al servidor de la aplicación abrazando.

El senderId del SDK y la aplicación son diferentes.

Implementación

Manifiesto

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> ... <receiver android:name="com.xxxx.xxxxx.xxxxx" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </receiver> 

Código de registro

 protected String doInBackground(Void... params) { String msg = ""; try { if (gcm == null) { gcm = GoogleCloudMessaging.getInstance(mContext); } regid = gcm.register(SENDER_ID); msg = "Device registered, registration ID=" + regid; storeRegistrationId(mContext, regid); listener.onGCMRegisterFinish(regid); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); } return msg; } 

Este código obtiene el regId del servidor GCM y lo envía a nuestro servidor backend. Se ejecuta en la inicialización del SDK y el regId se envía cada vez que la aplicación vuelve del fondo.

Notas

  • unregister() no se llama, ni desde el servidor ni desde el lado del cliente
  • Estoy levantando un brindis con el registro de identificación de vez en cuando, así que puedo verificar que es el mismo entre el cliente y el servidor:

Lado del cliente

Introduzca aquí la descripción de la imagen

Lado del servidor

 2015-08-02 12:31:22,383 INFO - request_2145354041215926507 update push token for user: XXXXXXXX, push_token: ...me1GttmSRipnWsCGVUueK7e0nk 

2 Solutions collect form web for “Android SDK obtiene un error NotRegistered de GCM después de unas horas”

Agregue Categoría con su nombre de paquete al intent-filter

  <receiver android:name=".xxxxx" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <!-- Receives the actual messages. --> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.xxxx" /> </intent-filter> </receiver> 

La generación de ID de registro incluye no sólo el dispositivo, sino también la aplicación y el ID de remitente. Si he entendido correctamente tu arquitectura, ¿quieres implementar una GCM-client-library (tu SDK) que permite a tu aplicación usar GCM a través de tu biblioteca? Si eso es cierto asegúrese de que sólo se registra una vez

El senderId del SDK y la aplicación son diferentes

Supongo que este es el problema, usted tiene que registrar cada aplicación con un identificador de remitente (por ejemplo, XYZ) y utilizar el ID de remitente SAME en el servidor para enviar la notificación. No es posible utilizar ABC como identificador de remitente para enviar notificaciones a un dispositivo registrado para el identificador de remitente XYZ

  • ¿Hay alguna forma de instalar sólo ADB sin SDK completo?
  • Problemas de advertencia de Dx con el último SDK de Android
  • Equivalente de LocalBroadcastManager sin la biblioteca de soporte de Android
  • android.net.SntpClient falta en Android SDK
  • Versión para Android de IntelliJ sdk
  • Android: Problemas para crear apk con Ant Release
  • ¿Hay Twitter API SDK para Android?
  • Facebook SDK no funciona en Android Studio
  • Cambiar la orientación de la pantalla - Android 3.2 en VirtualBox
  • ¿Cuál es la diferencia entre mac y windows sobre android SDK
  • La instalación de Android Studio SDK falló en Mac OS X
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.