|
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 |
|
Herramientas |
#1
|
||||
|
||||
¿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. |
|
#2
|
||||
|
||||
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. |
Gracias de parte de: | ||
#3
|
||||
|
||||
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. 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. |
#4
|
||||
|
||||
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...
__________________
|
#5
|
||||
|
||||
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!
|
#6
|
||||
|
||||
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."
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. |
Estás aquí | ||||||
|