Можно ли удалить Android-приложение для удаления?
Мое приложение использует Google C2DM (push-уведомление) для уведомления пользователей о новой активности от друзей. После установки приложения я зарегистрирую устройство на серверах C2DM и сохраняю номер телефона пользователя. Поэтому я знаю, что пользователь использует мое приложение, и я могу отправить ему push-уведомления. Но что произойдет, если пользователи отключат мое приложение, есть ли способ поймать его в моем приложении? Или единственный способ поймать ошибку на моем сервере, когда я отправляю C2DM, и он недоступен, а затем помечать пользователя как неактивного?
Я хотел бы уведомлять пользователей, когда их друзья используют приложение, и когда они больше не делают.
Какое наилучшее решение для этого сценария?
Ответы
Ответ 1
К сожалению, намерение ACTION_PACKAGE_REMOVED будет отправлено всем получателям, за исключением ваших собственных. Это подтверждено здесь.
Некоторые вопросы для вашего плана C2DM, так как я не очень хорошо знаком с ним. Если пользователь просто покидает свое устройство в течение длительного периода времени, это приведет к возникновению условия ошибки, которое вы используете? Как C2DM действительно сообщает "недоступное" устройство? Является ли это условием, которое возникает только тогда, когда оно пытается отправить push-уведомление и выходит из строя или оно, когда оно каким-то образом определяет, что оно достигает устройства, но не может быть правильно обработано? Очевидно, что во втором сценарии ваш план будет работать, но я вижу, что некоторые "ложные срабатывания" встречаются иначе.
Более старый вопрос SO для справки: android не получает Intent ACTION_PACKAGE_REMOVED в удаленном пакете
Ответ 2
Документация GCM объясняет эту ситуацию здесь:
https://developers.google.com/cloud-messaging/registration#how-uninstalled-client-app-unregistration-works
"Приложение может быть автоматически незарегистрировано после его удаления с устройства. Однако этот процесс не происходит сразу, поскольку Android не предоставляет обратный вызов для удаления".
В основном, когда GCM пытается отправить следующее push-уведомление, устройство сообщит GCM, что принимающее приложение было удалено.
Что касается уведомления друзей о том, что их друзья больше не используют приложение, GCM отправит на ваш сервер уведомлений ошибку NotRegistered
, когда произойдет этот сбой; это не будет немедленно, но можете ли вы использовать это?
Ответ 3
Служба Google C2DM работает в пассивном режиме, когда дело доходит до обнаружения удаленных приложений.
Первое push-уведомление после удаления вашего приложения (без регистрации из C2DM!!!) НЕ будет возвращать какую-либо ошибку в ответ. Однако второе push-уведомление вернет коды ошибок "недействительной регистрации" или "незарегистрированные", где вы можете понять, что приложение было удалено.
Причина в том, что серверы C2DM немедленно возвращают код ответа и только затем пытаются нажать клиент. Когда клиент отвечает, что приложение было удалено, оно удаляется с серверов C2DM. Следующая попытка нажатия немедленно вернет код ошибки.
Ответ 4
Да, но это довольно хаки.
Метод основан на том факте, что первое, что делает андроид при удалении приложения, - это удаление вашего файла данных. Таким образом, вы можете использовать наблюдателя файлов для обнаружения удаления.
Также вам нужно написать это в собственном коде. Если вы напишете свой код в java, ваше приложение будет удалено, прежде чем он сможет выполнить любой код.
см. эту демонстрацию: https://github.com/sevenler/Uninstall_Statics
Ответ 5
Я знаю только один способ с ответом 200 сервера с сообщением "NotRegistered" в теле.
NotRegistered - Registration_id больше недействителен, например, пользователь удалил приложение или отключил уведомления. Отправитель должен прекратить отправку сообщений на это устройство.
Ответ 6
У меня есть несколько моментов, чтобы сказать вам,
- Сообщество Android рекомендует использовать GCM вместо C2DM, поскольку он больше не доступен.
- В android нет возможности для приложений получать уведомления о том, что приложение удаляется.
- в GCM, если вы хотите прекратить отправку сообщений в удаленные приложения, вы можете ссылаться на этот
Когда вы отправляете сообщения на GCM с вашего сервера, вы получите строку ответа. В случае если вы получаете сообщение об ошибке "NotRegistered", вы должны удалить идентификатор регистрации из своей базы данных сервера, потому что приложение было удалено с устройства или оно не иметь широковещательного приемника, настроенного на получение com.google.android.c2dm.intent.RECEIVE intents. "
Ответ 7
Посмотрите на этот документ GCM:
Отмена регистрации GCM
Вы никогда не должны отменить регистрацию своего приложения. Это берется со стороны сервера.