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


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

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

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

7   51   2011-06-02 06:15:37

7 ответов:

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

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

старше так вопрос Для справки:android не получает намерение ACTION_PACKAGE_REMOVED в удаленном пакете

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

https://developers.google.com/cloud-messaging/registration#how-uninstalled-client-app-unregistration-works

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

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

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

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

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

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

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

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

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

У меня есть несколько моментов, чтобы сказать вам,

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

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

посмотрите в этот документ GCM: GCM Unregistration

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