Manejo de identificadores de registro de GCM para varios dispositivos, mismo usuario

Esta es una situación común que muchos de aplicaciones frente, pero estoy rezagado para entender cómo implementar:

Digamos que mi aplicación es una red social con un usuario conectado. Me gustaría enviar mensajes de GCM a ese usuario, para todos sus dispositivos que están conectados actualmente con mi aplicación.

Eso significa que mi servidor tiene para cada usuario una lista de todos sus ID de registro – uno para cada uno de sus dispositivos.

El problema: ¿cómo puedo rastrear exclusivamente cada uno de sus dispositivos? Parece que no hay una manera confiable para obtener identificador de dispositivo específico

Sin guardar la identificación del registro para cada dispositivo único – no veo cómo puedo manejarlo.

Las cosas se ensucian cuando el usuario va a desinstalar / logout y adquirir nuevo registro de identificación más tarde, que suponen para reemplazar uno de los identificadores conocidos existentes, pero ¿cuál de ellos?

Las cosas se pondrán aún más problemáticas si me gusta enviar mensajes sólo a un dispositivo específico, y no todos ellos …

Por favor, ayúdame a entender lo que me falta, y cuál es la manera correcta de manejar múltiples dispositivos de identificación de registro para el mismo usuario.

3 Solutions collect form web for “Manejo de identificadores de registro de GCM para varios dispositivos, mismo usuario”

Google maneja prácticamente todo el trabajo duro para usted al trabajar con GCM. Y proporcionan un método simple para mantener siempre el ID de registro actualizado. Hay un campo adicional en cada mensaje enviado llamado canonicalRegistrationId . Si hay un identificador en ese campo, el identificador de registro ha cambiado y necesita actualizarse. Este campo existe en cada mensaje y cada vez que envía uno, tiene que comprobar ese campo. Si hay un nuevo canonicalRegistrationId entonces debe actualizar el registrationId tan pronto como sea posible. El viejo puede seguir trabajando por algún tiempo, pero no se sabe cuándo se convierte en inválido.

Por ejemplo, en un backend de Google App Engine, el código que maneja los identificadores de registro cambiantes se vería de la siguiente manera:

 // We want to send a message to some devices // Get registered devices and then loop through them List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list(); for(RegistrationRecord record : records) { // Send the message to one device Result result = sender.send(msg, record.getRegId(), 5); // If the messageId is not null, then the message has been sent successfully if (result.getMessageId() != null) { log.info("Message sent to " + record.getRegId()); // Check for canonical message id // If it is not null, then the registrationId has changed String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // The registrationId has changed! We need to update it in the database log.info("Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId); record.setRegId(canonicalRegId); ofy().save().entity(record).now(); } } else { ... // Irrelevant error handling } } 

Así que lo que tienes que hacer es bastante simple: Cada vez que envías un mensaje, comprueba si hay un canonicalRegistrationId , si es así, entonces actualiza el antiguo registrationId con el canónico.

Creo que tienes que obtener el dispositivo IMEI no y guardarlo en su servidor con registro de identificación y cuando el usuario ReRegistar él mismo con otro dispositivo a continuación, obtener Comprobar número IMEI Sustituirlo por uno antiguo. La cosa principal sube ahora en la comprobación vieja del dispositivo envía IMEI no con el mensaje y SI IMEI no es emparejamiento entonces ninguÌ n …

Eso es…

Google admite la mensajería de grupo de dispositivos . Consulte este enlace: https://developers.google.com/cloud-messaging/notifications#managing_device_groups

Para manejar varios usuarios, puede crear un grupo para ese usuario y agregar el ID de registro a ese grupo. Para crear un grupo, envíe una solicitud como la siguiente a https://android.googleapis.com/gcm/notification :

 Content-Type:application/json Authorization:key=API_KEY project_id:SENDER_ID { "operation": "create", "notification_key_name": "appUser-Chris", "registration_ids": ["4", "8", "15", "16", "23", "42"] } 

Esta API devuelve una clave de notificación en respuesta que puede almacenar en su base de datos y utilizarla posteriormente para enviar notificaciones a ese grupo. Posteriormente, siempre que el usuario reg_id sesión en algún otro dispositivo, puede obtener el reg_id de ese dispositivo y agregarlo al grupo. Para agregar un dispositivo con el ID de registro 51 a appUser-Chris , enviaría esta solicitud:

 { "operation": "add", "notification_key_name": "appUser-Chris", "notification_key": "aUniqueKey", "registration_ids": ["51"] } 

Y cuando el usuario se desconecta del dispositivo, puede quitar el reg_id del grupo.

Enviar una notificación a un grupo es lo mismo que enviar notificación a un ID de registro.

Un problema que he observado aquí es si no se almacena la notification_key a su db mientras se crea un grupo no hay forma de que pueda volver a recibirlo. Y no se puede crear un nuevo grupo para ese mismo notification_key_name . Una solución a este problema es elegir sabiamente el nombre de notification_key_name . Por lo tanto, cuando no almacena la notification_key e intente de nuevo crear un grupo con el mismo noitification_key_name , obtendrá un error. En ese caso, simplemente puede cambiar el nombre de notification_key_name para ese usuario y crear un nuevo grupo. Espero que esto ayude.

  • ¿Está lista la producción de GCM? ¿Deberíamos empezar a usarlo ahora?
  • GCM no canceló el registro del dispositivo cuando la aplicación se desinstaló
  • ¿Cómo enviar notificación al cliente cuando Firebase tiene una nueva entrada?
  • Mostrar notificaciones push cuando la aplicación se abre / cierra de manera diferente
  • Cómo puedo recibir notificaciones de GCM cuando se detiene la aplicación
  • Abrir la aplicación Android desde la notificación PUSH
  • ID del remitente del GCM / número del proyecto
  • Cómo manejar toque de notificación en Android si se muestra automáticamente por GCM
  • Actividad de apertura después de hacer clic en notificación push android
  • Enviar notificaciones en Android mediante Google App Engine
  • ¿Cómo obtener una notificación interactiva push con Urban Airship en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.