Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 22/08/16, 21:20:36
Array

[xs_avatar]
_DeV_ _DeV_ no está en línea
Usuario poco activo
 
Fecha de registro: nov 2011
Mensajes: 45
Tu operador: Movistar

¿Cómo controlar si la app ha sido desinstalada?

Buenas!

Primero os pongo en situación. Mi app usa Firebase para el tema de notificaciones remotas. Además, tengo una base de datos con una serie de tablas, entre las cuales está la tabla de usuarios dónde tengo almacenada la información de los usuarios y su token de Firebase (el que se emplea para enviarle las notificaciones).

El caso es que a la hora de enviar notificaciones, lo que hago es desde mi propio servidor en un script PHP obtengo los tokens de la base de datos y envío la notificación a todos los usuarios gracias dicho token de cada usuario almacenado en la BD.

El problema viene cuando desinstalo la app. Según he estado mirando es imposible ejecutar cierto código o función antes de que la app se desinstale, por lo que si, por ejemplo, desinstalo la app los datos siguen la base de datos y, a la hora de crear la notificación y recuperar los tokens, estoy recuperando el token de una persona que ya no tiene la app instalada.

¿Hay alguna manera de controlar esto? He estado realizando pruebas y, si desinstalo la app y trato de enviarme una notificación, salta error, pero claro, lo que quiero es eliminar la información de la base de datos para evitar siquiera que ese error aparezca.

Espero haberme explicado bien, se que puede ser un poco enreversado!

Un saludo y gracias.
Responder Con Cita


  #2  
Viejo 22/08/16, 21:59:19
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
No puedes controlar la desinstalación de tu app en la propia app, pero si puedes controlar la desinstalación de otra app y ejecutar un código.

Es decir, si tienes instaladas las apps X y Y, puedes controlar la desinstalación de X desde Y, y viceversa, pero no puedes ejecutar código en X por la desinstalación de X.

Ahora bien, dicho esto, yo lo que hago en mi servidor es generar el Token y enviar la notificación, y recibo como respuesta que ese Token ya no es válido porque el usuario ya no tiene instalada la app. Y en ese momento borro el Token del servidor.

Del mismo modo que si el usuario renueva el Token (si desinstala la app y la vuelve a instalar 99% seguro que el Token que obtendrá será distinto al que tenía antes) al enviarlo al Token antiguo recibes como respuesta que se ha entregado, pero que hay un Token nuevo disponible. En ese caso lo que ocurrirá casi seguro es que ese Token nuevo también esté registrado en mi servidor, pero puede que no, así que en ese caso hago esto:

1) Borro todas las notificaciones pendientes al Token antiguo, porque se enviarán al nuevo, así sólo recibirá duplicada la notificación actual.

2) Compruebo si el Token nuevo existe en el servidor, si existe, borro el viejo. Si no existe hago un update del viejo por el nuevo.

Espero que te sirva.
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 23/08/16, 02:17:03
Array

[xs_avatar]
_DeV_ _DeV_ no está en línea
Usuario poco activo
 
Fecha de registro: nov 2011
Mensajes: 45
Tu operador: Movistar

 Cita: Originalmente Escrito por kriogeN Ver Mensaje
No puedes controlar la desinstalación de tu app en la propia app, pero si puedes controlar la desinstalación de otra app y ejecutar un código.

Es decir, si tienes instaladas las apps X y Y, puedes controlar la desinstalación de X desde Y, y viceversa, pero no puedes ejecutar código en X por la desinstalación de X.

Ahora bien, dicho esto, yo lo que hago en mi servidor es generar el Token y enviar la notificación, y recibo como respuesta que ese Token ya no es válido porque el usuario ya no tiene instalada la app. Y en ese momento borro el Token del servidor.

Del mismo modo que si el usuario renueva el Token (si desinstala la app y la vuelve a instalar 99% seguro que el Token que obtendrá será distinto al que tenía antes) al enviarlo al Token antiguo recibes como respuesta que se ha entregado, pero que hay un Token nuevo disponible. En ese caso lo que ocurrirá casi seguro es que ese Token nuevo también esté registrado en mi servidor, pero puede que no, así que en ese caso hago esto:

1) Borro todas las notificaciones pendientes al Token antiguo, porque se enviarán al nuevo, así sólo recibirá duplicada la notificación actual.

2) Compruebo si el Token nuevo existe en el servidor, si existe, borro el viejo. Si no existe hago un update del viejo por el nuevo.

Espero que te sirva.
Buenas,

Muchas gracias por responder. Una pena que Google aún no haya implementado nada de forma oficial para este problemilla.

Haré lo que comentas, cuando se de el error de token no registrado daré por hecho que el usuario ha desintalado la app y que puedo borrar sus datos de la base de datos.

Por otro lado, para el tema del cambio de token hago uso del método onTokenRefresh() y ese método se encarga de actualizar el token en la BD cuando éste cambia.

Un saludo.
Responder Con Cita
  #4  
Viejo 27/08/16, 18:32:22
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
 Cita: Originalmente Escrito por _DeV_ Ver Mensaje
Una pena que Google aún no haya implementado nada de forma oficial para este problemilla.
Tampoco creo que se pueda.
Qué pasaria si el usuario hiciera una desinstalación sin tener conexión? Tendría que quedarse un remanente de tu app hasta que vuelva a haber conexión?
Entonces no pasaría a estar desinstalada...
Responder Con Cita
  #5  
Viejo 27/08/16, 19:36:11
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Qué pasaria si el usuario hiciera una desinstalación sin tener conexión? Tendría que quedarse un remanente de tu app hasta que vuelva a haber conexión?
Entonces no pasaría a estar desinstalada...
¡Estaría en un estado de incertidumbre similar al del gato de Schrödinger!

Ahora en serio, Google sí lleva registro de las apps instaladas y desinstaladas a través de Play Store, más que nada porque en la consola de desarrollador te dice el número de desinstalaciones diarias.

Pero una cosa es Play Store y otra Firebase. Firebase Notifications es un servicio separado válido para iOS y Android, incluso si pudieran enlazar internamente con los datos de Play Store no podrían hacer lo propio con la App Store.

Otro punto importante, en relación a la cuestión original de @_DeV_ es que Firebase pensará lo mismo, ley del mínimo esfuerzo: "¿para qué molestarme en avisar a un servidor externo de que un usuario ha desinstalado la app cuando igual ni le hace falta? Ya cuando me pida entregar algo le digo que no está disponible."
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #6  
Viejo 28/08/16, 14:39:54
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Otro punto importante, en relación a la cuestión original de @_DeV_ es que Firebase pensará lo mismo, ley del mínimo esfuerzo: "¿para qué molestarme en avisar a un servidor externo de que un usuario ha desinstalado la app cuando igual ni le hace falta? Ya cuando me pida entregar algo le digo que no está disponible."
Eso es lo que hago yo, yo tengo en mi servidor mi propia cola de entregas gestionada por mi, y con la respuesta que te da GCM al enviar un mensaje ya sabes si el token no existe (aplicación desinstalada o simplemente petición a GCM por parte del usuario de eliminar el token).

También sabes si el usuario tiene un token distinto porque lo ha renovado al enviar un mensaje al token antiguo, lo peor en este caso es que se podría llegar a enviar el mismo mensaje 2 veces, según si se envió primero al token nuevo o al viejo.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 06:51:41 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /