Управление сеансами с помощью Xamarin.Forms (Android)
-
21-12-2019 - |
Вопрос
Прежде всего, я не уверен, что подхожу к этому лучше всего с точки зрения дизайна, но я немного новичок в Android и очень новичок в Xamarin.Forms.Моя установка представляет собой серию ContentPage
s в PCL Xamarin.Forms, которые работают с информацией из службы REST.Эта услуга при входе в систему предоставляет WorkToken
которое приложение затем сохраняет для выполнения дальнейших операций.Я храню это в ISessionManager
.
Моя проблема связана с рабочим процессом.у меня есть LoginPage
что я хочу сообщить пользователю, завершился ли его сеанс/сбой/что-то еще;по сути, если они не вошли в систему и не пытаются что-либо сделать, я хочу поместить эту страницу в стек и заставить их попытаться войти в систему, и если они предоставят действительные учетные данные, позвольте им продолжить с того места, где они остановились.Все это происходит по большей части в PCL, но я создал реализацию Android ISessionManager
который запрашивается на каждом ContentPage
переопределено OnAppearing
метод.Каждая страница вызывает ISessionManager
's CheckLogin
который сделает именно это, и если они не вошли в систему, это создаст Intent
и начать LoginActivity
через это. LoginActivity
по сути просто оборачивается вокруг PCL LoginPage
.
Проблема, с которой я сталкиваюсь, заключается в том, что, делая это таким образом, LoginActivity
запускается асинхронно поверх любой страницы, которая его вызвала.Однако эта вызывающая страница находится в нерабочем состоянии, поскольку она еще не инициализирована должным образом через службу REST.Я думаю, что есть два возможных решения.Либо запустите Intent
синхронно (что я не считаю возможным) или переосмыслить свой дизайн.Вот Intent
настраивать:
var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);
Я проверил несколько форумов Xamarin на наличие соответствующих сообщений по этому поводу, но не нашел ничего, кроме базовых рабочих процессов навигации в Xamarin.Forms.
Редактировать:Я нашел что-то аналогичное тому, что пытаюсь сделать здесь: Как передать переменные из нового намерения обратно в класс, который его создал в Android, но в контексте Xamarin.Forms.А startActivityForResult
решило бы мою проблему, если бы она существовала в Forms.Context
, но похоже, что нет эквивалента.
Решение
Почему вы создаете LoginActivity?это потому что нужно использовать что-то родное от андроида?
Моя первая мысль заключается в том, что после того, как вы проверите статус токена на OnAppearing, вы можете решить, нажимать или нет модальное окно для страницы входа в систему, после того, как вход пользователя завершен и токен сохранен, вы можете нажать модальное окно, и оно покажет предыдущую страницу, на которой был пользователь.