¿Es posible detectar la desinstalación de la aplicación de Android?

Mi aplicación está usando el C2DM de Google (notificación push) para notificar a los usuarios sobre la nueva actividad de sus amigos. Una vez que instalan la aplicación, registro el dispositivo con servidores C2DM y almacén el número de teléfono del usuario. Así que sé que el usuario está usando mi aplicación y puedo enviarle las notificaciones push. ¿Pero qué sucede si los usuarios desinstala mi aplicación, hay una manera de atraparlo en mi aplicación? O la única manera es coger un error en mi servidor cuando envío un C2DM y es inaccesible, a continuación, marcar un usuario como inactivo?

Me encantaría notificar a los usuarios cuando sus amigos están usando una aplicación y cuando ya no lo hacen.

¿Cuál es la mejor solución para este escenario?

Desafortunadamente, la intención de ACTION_PACKAGE_REMOVED será enviada a todos los receptores excepto a los suyos. Esto se confirma aquí .

Algunas preguntas para su plan C2DM, ya que no estoy muy familiarizado con él. Si el usuario sólo deja su dispositivo apagado durante un largo período de tiempo, ¿se disparará la condición de error que utiliza? ¿Cómo informa C2DM de un dispositivo "inaccesible"? ¿Es una condición que sólo ocurre cuando se intenta enviar la notificación push y falla o es cuando de alguna manera determina que llega al dispositivo pero no se maneja correctamente? Obviamente, en el segundo escenario su plan funcionaría, pero puedo ver algunos "falsos positivos" que ocurren de lo contrario.

Mayor pregunta de SO para referencia: android no recibiendo intención ACTION_PACKAGE_REMOVED en el paquete eliminado

La documentación de GCM explica esta situación aquí:

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

"Una aplicación puede ser cancelada automáticamente después de que se desinstale del dispositivo, pero este proceso no ocurre de inmediato, ya que Android no proporciona una devolución de llamada de desinstalación".

Básicamente, cuando GCM intenta enviar la siguiente notificación push, el dispositivo le dirá a GCM que la aplicación receptora fue desinstalada.

En cuanto a notificar a los amigos que sus amigos no están usando la aplicación, GCM enviará un error NotRegistered a su servidor de notificaciones cuando se produzca este error; No será inmediato, pero ¿podrías usar eso?

El servicio C2DM de Google está funcionando en modo pasivo cuando se trata de detectar aplicaciones desinstaladas.

La primera notificación push después de desinstalar su aplicación (sin cancelar el registro de C2DM !!!) NO devolverá ningún error en la respuesta. Sin embargo, la segunda notificación push devolverá un "registro no válido" o "no registrado" códigos de error donde se puede realizar la aplicación se desinstaló.

La razón es que los servidores C2DM devuelven el código de respuesta inmediatamente y sólo entonces intentan empujar al cliente. Cuando el cliente responde que se ha desinstalado una aplicación, se elimina de los servidores C2DM. El siguiente intento de empuje devolverá un código de error inmediatamente.

Sí, pero es bastante hacky. El método se basa en el hecho de que lo primero que hace Android al desinstalar su aplicación es la eliminación de su archivo de datos. Así que podría utilizar un observador de archivos para detectar la eliminación. También necesitas escribir esto en código nativo. Si escribe su código en java, su aplicación se desinstalará antes de poder ejecutar cualquier código. Consulte esta demostración: https://github.com/sevenler/Uninstall_Statics

Conozco sólo una forma con la respuesta del servidor 200 con el mensaje "NotRegistered" en el cuerpo.

NotRegistered: el registration_id ya no es válido, por ejemplo, el usuario ha desinstalado la aplicación o ha desactivado las notificaciones. El remitente debe dejar de enviar mensajes a este dispositivo.

Tengo algunos puntos que deciros,

  1. La comunidad de Android recomienda utilizar GCM en lugar de C2DM, ya que ya no está disponible.
  2. En android no hay forma de que las aplicaciones se notifiquen que la aplicación se está desinstalando.
  3. En GCM si quieres dejar de enviar mensajes a aplicaciones desinstaladas puedes referirte a

Cuando envíe mensajes a GCM desde su servidor obtendrá una cadena de respuesta. En caso de que obtenga un error como "NotRegistered", debe quitar el ID de registro de la base de datos del servidor porque la aplicación se ha desinstalado del dispositivo o no tiene una Receptor de difusión configurado para recibir intentos com.google.android.c2dm.intent.RECEIVE. "

Mire en este documento de GCM : GCM Unregistration

Nunca debe cancelar el registro de su aplicación. Esto es cuidado desde el lado del servidor.

  • Desinstalación de la aplicación Android
  • Descubre por qué se está desinstalando una aplicación de Android
  • Instalar / desinstalar APKs de forma programática (PackageManager vs Intents)
  • ¿Cómo desinstalar mi propia aplicación de Android sin la intervención del usuario?
  • Desinstalación de APK: una última acción antes de desinstalar
  • Contraseña de desinstalación
  • Instalar la aplicación de forma programática desde la fuente de Android
  • Cómo algunas aplicaciones rastrean su propia desinstalación en android
  • ¿Cómo evitar que la aplicación de Android se desinstale durante la implementación con Xamarin Studio?
  • Persistencia de datos de Android después de la desinstalación
  • Realizar una tarea en desinstalar en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.