Подтвердить что ты не робот

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 script на стороннем сервере, который удаляет 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);


    }
4b9b3361

Ответ 1

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

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

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