Wilson Vargas
Wilson Vargas

Un programador enamorado de su código.

Share


Suscribete


Mantente al tanto de mis nuevos artículos

Tags


Featured on Planet Xamarin badge

Twitter


Ocultando la información de una aplicación suspendida en Xamarin.Forms

Cuando una aplicación pasa a un estado de suspensión, es decir, cuando es reemplazada por otra aplicación y esta pasa a segundo plano, el sistema operativo toma una captura de pantalla y la usa como una vista previa de la aplicación.

En algunas ocasiones nosotros queremos ocultar información sensible de la aplicación, pero una manera de acceder; no por completo, pero sí parcialmente, es de la forma explicada arriba.

Para ser mas claro, la aplicación de WhatsApp últimamente incluyó la característica de usar la autenticación con huella para acceder a la aplicación, esto porque en muchos casos los usuarios no quieren que puedan ver sus conversaciones.

Sin embargo, cuando la aplicación pasaba a segundo plano y usábamos el administrador de tareas del teléfono, se podía ver parte de algunas de sus ultimas conversaciones, debido a que el sistema operativo por defecto toma una captura de lo último que hiciste en la aplicación y la usa como vista principal, este error ha sido solucionado y ahora se ve de esta manera:

drawing

En este ejemplo se muestra claramente como WhatsApp protege la información cuando la aplicación entra en estado de suspensión.

Tal vez no sea una característica tan importante en la mayoría de aplicaciones, pero en casos puntuales es un requerimiento esencial.

Supongamos que creamos una aplicación de autenticación donde en la pantalla principal se muestra todos códigos que uso para acceder a mis cuentas. Nuestra aplicación sería vulnerable al momento de entrar en estado de suspensión porque los códigos podrían ser vistos al momento de cambiar de aplicación.

Manos al código

Bueno, esta vez no seré muy enfático en mostrar como crear un proyecto ni en el diseño que va a tener, sino simplemente en como ocultar la información cuando nuestra aplicación entra en estado de suspensión. Igual tu puedes ver el código fuente de este post en mi cuenta de GitHub

Haremos el ejemplo de una aplicación que almacena códigos de autenticación, imaginemos que en esta aplicación está guardados los códigos para acceder a nuestra cuenta de Facebook, de Github, de tu correo etc.

Nuestra aplicación cuando la usamos se ve de la siguiente manera.

Pero cuando pasa a estado de suspensión, es decir a segundo plano, se ve de la siguiente manera:

Obviamente no queremos que nuestros códigos de autenticación se vean de esta manera, para eso vamos a escribir un poco de código…

Xamarin.iOS

En nuestro proyecto Xamarin.iOS hay varias maneras de hacerlo, la más fácil es poner un fondo blanco a nuestra ventana principal, pero a mi parecer eso no es muy agradable para el usuario.

En lugar de eso vamos a usar la imagen de SplashScreen para ponerla cuando nuestra aplicación está en suspensión. Para eso en el archivo AppDelegate.cs y agregaremos dos métodos sobrescritos.

El primero será OnResignActivation este método es llamado cuando la aplicación está a punto de suspenderse o cuando el usuario tiene alguna interrupción, como una llamada o un mensaje de texto.

Aquí lo que haremos es obtener la imagen de nuestro SplashScreen y convertirla en tipo UIImageView, luego de eso simplemente la agregamos a la vista principal de nuestra aplicación.

Ahora sobrescribimos el segundo método, OnActivated este método es llamado cuando se inicia la aplicación y cada vez que la aplicación vuelve al primer plano. Aquí solo quitaremos la imagen de nuestra vista principal.

Finalmente, cuando nuestra aplicación entra en estado de suspensión se ve de la siguiente manera:

drawing

Xamarin.Android

En Android, realmente no existe algo para hacer una superposición, así como lo hice en iOS, o al menos no que yo sepa 🤣 . Si tú conoces de alguna manera de hacer lo mismo que hicimos en Xamarin.iOS pues siéntete libre de enviar un PR a este proyecto o escribirme un tweet diciendo cómo se hacerlo.

Para este caso vamos a ir al archivo MainActivity.cs, en el método OnCreate, simplemente agregamos la bandera WindowManagerFlags.Secure, esto tenemos que hacerlo después que se haya cargado Xamarin.Forms, para asegurarnos de que no se sobrescriba.

Finalmente, cuando nuestra aplicación entra en estado de suspensión se ve de la siguiente manera:

drawing

Conclusión

Muchas aplicaciones necesitan ocultar información dentro de ellas, pero cuando entra en estado de suspensión el sistema operativo toma una captura de pantalla y la pone como vista principal.

En este articulo explicamos como ocultar dicha información cuando nuestra aplicación entra en estado de suspensión, recuerda que puedes encontrar el código fuente de este ejemplo en mi cuenta de Github. Nos leemos pronto! 😊

Comentarios