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.
- ¿Cómo configurar Google Cloud Messaging para Android?
- Alerta de visualización cuando llega el empuje
- Enviar notificaciones mediante GCM en Android
- Cambiar el nombre del paquete de Android para el proyecto de phonegap
- Un solo dispositivo de repente dejó de empujar C2DM desde mi servidor
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); }
- Android GCM PushNotification - Añadir añadir archivo de sonido personalizado en la aplicación
- ¿Hay algún servicio de notificación push en Android como Apple Push Notification Service?
- No recibir notificaciones de notificación de pars en Android en BroadcastReceiver personalizado
- Anular el registro en la nueva mensajería de Google Cloud
- El Dirigible Urbano se estrella al despegar. Argumento de excepción ilegal
- Android - FirebaseApp / Firebase-Inicialización no se inicia
- Android: Notificación de prueba en línea (Google Cloud Messaging)
- Cómo analizar GCM responder a eliminar identificación de registro no válido del servidor con php
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).
- CMUSphinx PocketSphinx – Reconocer todo (o gran cantidad) de palabras
- Consulta de base de datos de Android ContentProvider varias tablas