У меня есть приложение, которое использует 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);
}