GCM как отменить регистрацию устройства с GCM и сторонним сервером

У меня есть приложение, которое использует push-уведомления GCM. Он работает нормально, и мое устройство регистрирует и принимает push-сообщения.

Если я удалю приложение с моего устройства, я больше не получаю сообщения, как вы ожидали. TextBox, в котором вы отправляете сообщения на сервере, все еще существует после того, как я удалю установку приложения, чего я ожидаю.

Я просмотрел документацию, касающуюся отмены регистрации, и вы можете сделать это вручную или автоматически.

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. 

Я не понимаю последнее утверждение в приведенном выше списке.

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

Как это достигается?

Также, если приложение удалено с устройства, как он может сделать заявление ниже? Есть ли метод жизненного цикла приложения, который выполняется как приложение, удаляется с устройства? Если это так, это место, где размещается код, который информирует GCM-сервер об удалении и вызывает скрипт php на стороннем сервере, который удаляет regID из БД?

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

заранее спасибо,

Matt

 [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] Код незарегистрированного реестра приведен ниже для отмены регистрации устройства на стороннем сервере после удаления приложения с телефона. Код в дополнение к учебнику ниже.

руководство

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); } 

Solutions Collecting From Web of "GCM как отменить регистрацию устройства с GCM и сторонним сервером"

Когда сервер GCM пытается отправить сообщение на устройство после того, как приложение было удалено, клиент GCM обнаруживает, что это приложение больше не установлено на устройстве. Вы не делаете этого в своем коде приложения. Клиентский компонент GCM для ОС Android делает это.

В следующий раз, чтобы попытаться отправить сообщение в приложение на устройстве, которое его удалило, сервер GCM уже знает, что он был удален, и отправляет вам ошибку NotRegistered .

Не существует метода жизненного цикла, когда приложение удаляется с устройства. Если бы это было так, вам не понадобилась бы последовательность событий, которые вы указали выше, чтобы сервер GCM и сторонний сервер обнаруживали, что приложение было удалено (поскольку вы могли использовать такой метод для отмены регистрации вашего приложения с помощью GCM-сервер и сообщить стороннему серверу, что приложение было удалено с этого устройства).