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

Как отменить регистрацию с GCM после удаления приложения

Я настроил GCM в своем приложении. Я хочу отменить регистрацию устройства из GCM всякий раз, когда пользователь удаляет приложение.

Я получил код как

Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);

но где мы должны поместить этот код..?

Спасибо.

4b9b3361

Ответ 1

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

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

Ответ 2

Вы должны проверить это на своем сервере. Вы не можете сделать это из кода приложения, так как нет способа узнать, когда пользователь удаляет приложение.

См.: Внедрение канонических идентификаторов. Ссылка: https://developers.google.com/cloud-messaging/http#request

Идентификатор канонической регистрации определяется как идентификатор последней регистрации, запрошенный вашим приложением. Это идентификатор, который сервер должен использовать при отправке сообщений на устройство.

Если позже вы попытаетесь отправить сообщение с использованием другого регистрационного идентификатора, GCM будет обрабатывать запрос как обычно, но он будет содержать идентификатор канонической регистрации в поле registration_id ответа. Обязательно замените идентификатор регистрации, хранящийся на вашем сервере, этим каноническим идентификатором, так как в конечном итоге идентификатор, который вы используете, перестанет работать.

Ссылка: https://stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/adv.html#canonical

Если идентификатор Canonical не равен 0, у вас есть повторная регистрация.

Скажем, например, у вас есть две регистрации в вашей базе данных:

registration_A

registration_B

Когда вы отправляете push-уведомление, ваш сервер будет отвечать тем, что выглядит следующим образом:

{"multicast_id":########,"success":1,"failure":0,"canonical_ids":1,"results":
[{"registration_id":"new_id_registration_id","message_id":"0:########"}]}
{"multicast_id":######### ,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:################"}]}

Храните эти данные в массиве. Обратите внимание, что первый имеет "canonical_ids": 1. Это означает, что существует дубликат. Поэтому, чтобы узнать, какая запись в вашей базе данных является старой. Просто найдите "registration_id" в приведенном выше и сохраните значение индекса. Это значение индекса указывает на старую запись в вашей базе данных.

В приведенном выше примере registration_A будет старой register_id.

Получите все записи из своей базы данных. Затем удалите его на основе полученного значения индекса. ИЛИ вы можете обновить его. Это зависит от того, как вы настроили свою базу данных.

Удачи!