Можно ли обнаружить удаление приложения для Android?

Мое приложение использует Google C2DM (push-уведомления) для уведомления пользователей о новых действиях от друзей. После установки приложения я регистрирую устройство на серверах C2DM и сохраняю номер телефона пользователя. Так что я знаю, что пользователь использует мое приложение, и я могу отправить ему / ей push-уведомления. Но что произойдет, если пользователи удалят мое приложение, есть ли способ поймать его в моем приложении? Или единственный способ - поймать ошибку на моем сервере, когда я отправляю C2DM, и он недоступен, а затем пометить пользователя как неактивного?

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

Каково лучшее решение для этого сценария?

8 ответов

Решение

К сожалению, намерение ACTION_PACKAGE_REMOVED будет разослано всем получателям, кроме вашего. Это подтверждается здесь.

Некоторые вопросы для вашего плана C2DM, так как я не очень знаком с ним. Если пользователь просто оставит свое устройство на долгое время, это вызовет состояние ошибки, которое вы используете? Как C2DM на самом деле сообщает о "недоступном" устройстве? Это условие, которое возникает только тогда, когда он пытается отправить push-уведомление и терпит неудачу, или это когда он каким-то образом определяет, что он достигает устройства, но не обрабатывается должным образом? Очевидно, что во втором сценарии ваш план сработает, но я вижу некоторые "ложные срабатывания", происходящие в противном случае.

Более старый вопрос для справки: Android не получает Intent ACTION_PACKAGE_REMOVED в удаленном пакете

Документация GCM объясняет эту ситуацию здесь:

https://developers.google.com/cloud-messaging/registration

"Приложение может быть автоматически отменено после его удаления с устройства. Однако этот процесс не происходит сразу, так как Android не обеспечивает обратный вызов удаления".

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

Что касается уведомления друзей о том, что их друзья больше не используют приложение, GCM отправит NotRegistered ошибка вашего сервера уведомлений при возникновении этого сбоя; это не будет немедленным, но не могли бы вы это использовать?

Да, но это довольно забавно. Этот метод основан на том факте, что первое, что делает Android при удалении вашего приложения, - это удаление файла данных. Таким образом, вы можете использовать средство отслеживания файлов для обнаружения удаления. Также вам нужно написать это в нативном коде. Если вы напишите свой код на Java, ваше приложение будет удалено, прежде чем оно сможет выполнить какой-либо код. пожалуйста, посмотрите эту демонстрацию: https://github.com/sevenler/Uninstall_Statics

Служба Google C2DM работает в пассивном режиме, когда дело доходит до обнаружения удаленных приложений.

Первое push-уведомление после удаления вашего приложения (без отмены регистрации в C2DM!!!) НЕ возвращает ошибку в ответ. Тем не менее, второе push-уведомление возвратит "неверную регистрацию" или "незарегистрированные" коды ошибок, при которых вы можете понять, что приложение было удалено.

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

У меня есть кое-что сказать,

  1. Android-сообщество рекомендует вам использовать GCM вместо C2DM, так как он больше не доступен.
  2. В Android нет способа, чтобы приложения могли получать уведомления о том, что приложение удаляется.
  3. в GCM, если вы хотите прекратить отправку сообщений в неустановленные приложения, вы можете сослаться на это

Когда вы отправляете сообщения в GCM с вашего сервера, вы получите строку ответа. При этом, если вы получаете сообщение об ошибке "NotRegistered", вы должны удалить регистрационный идентификатор из базы данных вашего сервера, поскольку приложение было удалено с устройства или у него нет Приемник широковещания настроен на получение намерений com.google.android.c2dm.intent.RECEIVE."

Я знаю только один способ с ответом сервера 200 с сообщением "NotRegistered" в теле.

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

Посмотрите на этот документ GCM: GCM Unregistration

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

Чтобы обнаружить удаление приложения с помощью сервисов Google Play, вы можете использовать API отчетов об удалении приложений. Этот API позволяет получать уведомления, когда пользователи удаляют ваше приложение. @СпасибоChatGPT

Другие вопросы по тегам