Gerenciamento de sessão com Xamarin.Formulários (Android)
-
21-12-2019 - |
Pergunta
Primeiro de tudo, eu não tenho certeza se eu estou indo mesmo sobre isso da melhor maneira em termos de design, mas eu sou um pouco novo para o Android e muito novo para Xamarin.Formulários.Minha configuração é uma série de ContentPage
s em um Xamarin.Formulários PCL que todos lidam com informações de um serviço REST.Este serviço, ao fazer o login, concede um WorkToken
que a aplicação, em seguida, agarra a fim de realizar mais operações.Estou armazenando isto em um ISessionManager
.
O meu problema é um problema de fluxo de trabalho.Eu tenho um LoginPage
que eu quero apresentar para o usuário se a sua sessão foi encerrada/falha/tudo;basicamente, se eles não estão registrados no e tentar fazer qualquer coisa, quero empurrar essa página novamente na pilha e forçá-los a tentativa para iniciar sessão e se eles fornecer credenciais válidas deixá-los continuar de onde parou.Tudo isto está a acontecer, para a maioria de parte, em PCL, mas eu criei um Android implementação do ISessionManager
que é consultado cada ContentPage
's substituído OnAppearing
o método.Cada página de chamadas ISessionManager
's CheckLogin
o que irá fazer exatamente isso, e se não for, ele irá criar um Intent
e começar a LoginActivity
através disso. LoginActivity
essencialmente, apenas envolve o PCL é LoginPage
.
O problema que eu tenho é que, fazendo dessa maneira, o LoginActivity
é executado de forma assíncrona na parte superior de qualquer página chamou.Esta página chamada está em um estado quebrado, no entanto, porque ele não foi inicializado corretamente através de RESTO o serviço ainda.Eu imagino que há duas soluções possíveis.Execute o Intent
de forma síncrona (que eu não acho que é possível) ou repensar meu projeto.Aqui está o Intent
o programa de configuração:
var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);
Eu chequei várias Xamarin fóruns relacionados posts sobre isso, mas não tenho encontrado muito além do básico de navegação fluxos de trabalho no Xamarin.Formulários.
Editar:Eu encontrei algo análogo ao que eu estou tentando fazer aqui: Como passar variáveis a partir de uma nova intenção de trás para a classe que o criou no android, mas dentro do contexto da Xamarin.Formulários.O startActivityForResult
iria resolver o meu problema, se é que existiam em Forms.Context
, mas não parece ser um equivalente.
Solução
Por que você está criando uma loginatividade?é porque você precisa usar algo nativo do Android?
Meu primeiro pensamento é que depois de verificar o status do token no OnAppearing, você pode decidir empurrar ou não o modal para a página de login, após o login do usuário terminar e o token é salvar, você podeModal e mostrará a página anterior, o usuário foi.