2011-06-02 11 views
48

Mi aplicación utiliza el C2DM de Google (notificación push) para notificar a los usuarios sobre nuevas actividades de amigos. Una vez que instalan la aplicación, registro el dispositivo con los servidores C2DM y almaceno el número de teléfono del usuario. Entonces sé que el usuario está usando mi aplicación y puedo enviarle las notificaciones automáticas. Pero, ¿qué sucede si los usuarios desinstalan mi aplicación? ¿Hay alguna forma de detectarla en mi aplicación? ¿O la única forma es detectar un error en mi servidor cuando envío un C2DM y es inalcanzable, y luego marcar a un usuario como inactivo?¿Es posible detectar la desinstalación de la aplicación Android?

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?

+1

La siguiente aplicación (de alguna manera) abre una nueva pestaña en el navegador predeterminado tan pronto como la haya desinstalado: https://play.google.com/store/apps/details?id= com.UCMobile.intl – caw

+2

Para los nuevos desarrolladores de aplicaciones: no almacene el número de teléfono del usuario. [Use la ID de publicidad en su lugar] (http://android-developers.blogspot.com/2013/10/google-play-services-40.html). –

+1

@DanDascalescu ¿Le interesaría echar un vistazo aquí http://chat.stackoverflow.com/rooms/99906/android-canonicals? Podría hacerlo con buen feeedback. –

Respuesta

15

Lamentablemente, el intento ACTION_PACKAGE_REMOVED se enviará a todos los receptores, excepto el suyo. Esto se confirma here.

Algunas preguntas para su plan C2DM, ya que no estoy muy familiarizado con él. Si el usuario simplemente deja su dispositivo apagado durante un largo período de tiempo, ¿activará la condición de error que utiliza? ¿Cómo informa realmente C2DM un dispositivo "inalcanzable"? ¿Es una condición que solo ocurre cuando intenta enviar la notificación de inserción 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" ocurriendo de otra manera.

pregunta más viejo, así como referencia: android not receiving Intent ACTION_PACKAGE_REMOVED in the removed package

+2

La aplicación 'NQ Mobile Security' está llamando a una Actividad en la vista de desinstalación en http://i.imgur.com/Fos9N.png, http://i.imgur.com/fIZbK.png, http : //i.imgur.com/cG9Hr.png y la pregunta http://stackoverflow.com/questions/10219328/how-to-show-an-activity-before-my-app-is-uninstalled-android –

+0

Ok , alguien me votó hace poco sobre esto. ¿Ha cambiado desde que respondí esto hace 5 años? – MattC

+1

@MattC: he arreglado los documentos en el sitio de Android. Quizás el voto a favor se deba a [otras respuestas] (http://stackoverflow.com/questions/18692571/how-can-app-detect-that-its-going-to-be-uninstalled) ofreciendo algunas soluciones? –

3

sé de una sola manera de respuesta del servidor 200 con el mensaje "NotRegistered" en el cuerpo.

No registrado: 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.

7

El servicio Google C2DM funciona en modo pasivo cuando se trata de detectar aplicaciones desinstaladas.

La primera notificación de inserción después de desinstalar su aplicación (sin anular el registro de C2DM !!!) NO arrojará ningún error en respuesta. Sin embargo, la segunda notificación de inserción devolverá un "registro no válido" o códigos de error "no registrados" en los que puede darse cuenta de que la aplicación se desinstaló.

La razón es que los servidores C2DM devuelven el código de respuesta inmediatamente y solo luego intentan empujar al cliente. Cuando el cliente responde que se desinstaló una aplicación, se elimina de los servidores C2DM. El próximo intento de envío devolverá un código de error de inmediato.

44

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

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

"Una aplicación puede ser automáticamente registrado después de que se desinstala del dispositivo Sin embargo, este proceso no ocurre de inmediato, ya no lo hace Android proporcionar una devolución de llamada de desinstalación ".

Básicamente, cuando GCM intenta enviar la siguiente notificación de inserción, el dispositivo le indicará a GCM que la aplicación receptora se ha desinstalado.

En cuanto a notificar a sus amigos que sus amigos ya no usan 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?

3

que tienen algunos puntos que le diga,

  1. comunidad Android recomienda utilizar GCM en lugar de C2DM puesto que ya no está disponible.
  2. En Android no hay forma de que las aplicaciones se notifiquen de que la aplicación se desinstala.
  3. en GCM Si desea detener el envío de mensajes a aplicaciones no instaladas puede consultar este

Al enviar mensajes a GCM de su servidor obtendrá la respuesta string.In que si usted está recibiendo el error como "No registrado, debe eliminar la identificación de registro de su base de datos del servidor porque la aplicación se desinstaló del dispositivo o no tiene un receptor de difusión configurado para recibir intenciones com.google.android.c2dm.intent.RECEIVE".

2

Mira en este documento GCM: GCM Unregistration

Nunca se debe anular el registro de la aplicación. Esto es cuidado desde el lado del servidor.

7

Sí, pero es bastante hacky. El método se basa en el hecho de que lo primero que hace Android cuando desinstala su aplicación es eliminar su archivo de datos. Entonces podrías usar un vigilante de archivos para detectar la eliminación. También necesita escribir esto en código nativo. Si escribe su código en java, su aplicación se desinstalará antes de que pueda ejecutar cualquier código. por favor vea esta demostración: https://github.com/sevenler/Uninstall_Statics

Cuestiones relacionadas