Gestión de sesiones con Xamarin.Forms (Android)
-
21-12-2019 - |
Pregunta
En primer lugar, no estoy seguro de si estoy haciendo esto de la mejor manera en términos de diseño, pero soy un poco nuevo en Android y muy nuevo en Xamarin.Forms.Mi configuración es una serie de ContentPage
Hay en un PCL de Xamarin.Forms que tratan con información de un servicio REST.Este servicio, al iniciar sesión, otorga un WorkToken
que la aplicación conserva para realizar más operaciones.Estoy guardando esto en un ISessionManager
.
Mi problema es un problema de flujo de trabajo.tengo un LoginPage
que quiero presentarle al usuario si su sesión finalizó/falló/lo que sea;Básicamente, si no han iniciado sesión e intentan hacer algo, quiero colocar esta página en la pila y obligarlos a intentar iniciar sesión y, si proporcionan credenciales válidas, dejarles continuar donde lo dejaron.Todo esto ocurre, en su mayor parte, en PCL, pero he creado una implementación de Android del ISessionManager
que se consulta en cada ContentPage
está anulado OnAppearing
método.Cada página llama ISessionManager
's CheckLogin
que hará precisamente eso, y si no han iniciado sesión, creará una Intent
y comenzar el LoginActivity
a través de eso. LoginActivity
esencialmente simplemente envuelve el PCL LoginPage
.
El problema con el que me estoy encontrando es que, al hacerlo de esta manera, el LoginActivity
se ejecuta de forma asincrónica encima de cualquier página que lo llame.Sin embargo, esta página de llamada está en un estado roto porque aún no se ha inicializado correctamente a través del servicio REST.Imagino que hay dos posibles soluciones.O ejecute el Intent
sincrónicamente (lo cual no creo que sea posible) o repensar mi diseño.Aquí esta la Intent
configuración:
var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);
Revisé varios foros de Xamarin en busca de publicaciones relacionadas con esto, pero no encontré mucho más allá de los flujos de trabajo de navegación básicos en Xamarin.Forms.
Editar:Encontré algo análogo a lo que estoy tratando de hacer aquí: Cómo pasar variables de una nueva intención a la clase que la creó en Android, pero dentro del contexto de Xamarin.Forms.El startActivityForResult
resolvería mi problema si existiera en Forms.Context
, pero no parece haber un equivalente.
Solución
¿Por qué estás creando una LoginActivity?¿Es porque necesitas usar algo nativo de Android?
Lo primero que pensé es que después de verificar el estado del token en OnAppearing, usted puede decidir presionar o no el modal para la página de inicio de sesión, después de que el usuario inicie sesión y se guarde el token, puede abrir el modal y mostrará la página anterior en la que se encontraba el usuario.