GCM cómo anular el registro de un dispositivo con GCM y servidor de terceros

Tengo una aplicación que usa notificaciones de envío de GCM. Funciona bien y mi dispositivo registra y recibe mensajes push.

Si desinstalo la aplicación de mi dispositivo ya no recibo los mensajes como se esperaría. El TextBox en el que envía mensajes en el servidor sigue ahí después de desinstalar la aplicación, que también esperaría.

He examinado la documentación relativa a la cancelación del registro y puede hacerlo de forma manual o automática.

The end user uninstalls the application. The 3rd-party server sends a message to GCM server. The GCM server sends the message to the device. The GCM client receives the message and queries Package Manager about whether there are broadcast receivers configured to receive it, which returns false. The GCM client informs the GCM server that the application was uninstalled. The GCM server marks the registration ID for deletion. The 3rd-party server sends a message to GCM. The GCM returns a NotRegistered error message to the 3rd-party server. The 3rd-party deletes the registration ID. 

No entiendo la siguiente declaración en la lista anterior.

 The GCM returns a NotRegistered error message to the 3rd-party server. 

¿Cómo se consigue esto?

También si la aplicación se desinstala desde el dispositivo, ¿cómo puede hacer la declaración a continuación? ¿Existe un método de ciclo de vida de la aplicación que se ejecuta como una aplicación se quita de un dispositivo? Si lo hay, ¿es este el lugar donde se coloca el código que informa al servidor GCM de la desinstalación y las llamadas a un script php en el servidor de terceros que elimina el regID del DB?

 The GCM client informs the GCM server that the application was uninstalled. 

gracias por adelantado,

Mate

 [edit1] static void unregister(final Context context, final String regId) { Log.i(TAG, "unregistering device (regId = " + regId + ")"); String serverUrl = SERVER_URL + "/unregister.php"; Map<String, String> params = new HashMap<String, String>(); params.put("regId", regId); try { post(serverUrl, params); GCMRegistrar.setRegisteredOnServer(context, false); String message = context.getString(R.string.server_unregistered); CommonUtilities.displayMessage(context, message); } catch (IOException e) { // At this point the device is unregistered from GCM, but still // registered in the server. // We could try to unregister again, but it is not necessary: // if the server tries to send a message to the device, it will get // a "NotRegistered" error message and should unregister the device. String message = context.getString(R.string.server_unregister_error, e.getMessage()); CommonUtilities.displayMessage(context, message); } } 

[EDIT2] El código de no registro a continuación es para anular el registro del dispositivo en el servidor de terceros después de eliminar la aplicación del teléfono. El código es además del tutorial a continuación.

tutorial

Send_messages.php

 <?php if (isset($_GET["regId"]) && isset($_GET["message"])) { $regId = $_GET["regId"]; $message = $_GET["message"]; $strRegID = strval($regId); include_once './GCM.php'; include_once './db_functions.php'; $gcm = new GCM(); $registatoin_ids = array($regId); $message = array("price" => $message); $result = $gcm->send_notification($registatoin_ids, $message); $db = new db_Functions(); if (strcasecmp ( strval($result) , 'NotRegistered' )) { $db->deleteUser($strRegID); } } ?> 

Db_functions.php

 public function deleteUser($regid) { $strRegID = strval($regid); $serverName = "LOCALHOST\SQLEXPRESS"; $uid = "gcm"; $pwd = "gcm"; $databaseName = "gcm"; $connectionInfo = array( "UID"=>$uid, "PWD"=>$pwd, "Database"=>$databaseName); $db = sqlsrv_connect($serverName,$connectionInfo) or die("Unable to connect to server"); $query = "DELETE FROM gcmUser2 WHERE gcuRegID = '$regid'"; $result = sqlsrv_query($db, $query); } 

Cuando el servidor GCM intenta enviar el mensaje al dispositivo una vez que se ha desinstalado la aplicación, el cliente GCM detecta que esta aplicación ya no está instalada en el dispositivo. No lo haces en tu código de aplicación. El componente cliente GCM del sistema operativo Android lo hace.

La próxima vez que intente enviar un mensaje a la aplicación en el dispositivo que la desinstaló, el servidor GCM ya sabrá que se ha desinstalado y le enviará el error NotRegistered .

No se llama al método de ciclo de vida cuando se quita la aplicación del dispositivo. Si lo hubiera, no necesitaría la secuencia de eventos que citó anteriormente para que el servidor GCM y el servidor de terceros detecten que la aplicación se ha desinstalado (ya que podría haber utilizado dicho método para cancelar el registro de la aplicación desde el GCM y para que el servidor de terceros sepa que la aplicación se desinstaló de ese dispositivo).

  • No recibe la notificación de push de GCM de Amazon SNS
  • Navegar hasta la actividad de los padres desde la notificación
  • ¿Cómo enviar notificación al cliente cuando Firebase tiene una nueva entrada?
  • PushPlugin registro va a errorhandler mostrando 'Clase no encontrada' con cordova 4.0.0 para plataforma android
  • Enviar notificación múltiple a GCM usando JSON
  • GCM devuelve un tipo de mensaje nulo
  • Envío de mensajes (notificación) a un grupo - Android
  • Notificaciones Locales en Cordova 3.0.0
  • ID de registro duplicado de Android para diferentes dispositivos
  • Cómo capturar la aplicación de desinstalación en el dispositivo y dejar que el servidor sepa esto (iOS / Android)
  • Lados negativos de C2dM
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.