使用 Xamarin.Forms 进行会话管理 (Android)
-
21-12-2019 - |
题
首先,我不确定我在设计方面是否是最好的方式,但我对 Android 有点陌生,对 Xamarin.Forms 也很陌生。我的设置是一系列 ContentPage
Xamarin.Forms PCL 中的所有组件都处理来自 REST 服务的信息。该服务在登录后授予 WorkToken
然后应用程序保留该信息以便执行进一步的操作。我将其存储在 ISessionManager
.
我的问题是工作流程问题。我有一个 LoginPage
我想向用户展示他们的会话是否已结束/出现故障/无论什么情况;基本上,如果他们没有登录并尝试执行任何操作,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,则让他们从上次中断的地方继续。所有这一切大部分都在 PCL 中进行,但我已经创建了一个 Android 实现 ISessionManager
这是对每个查询 ContentPage
被覆盖 OnAppearing
方法。每个页面都会调用 ISessionManager
的 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?是因为你需要使用 android 原生的东西吗?
我的第一个想法是,在检查 OnAppearing 上的令牌状态后,您可以决定是否推送登录页面的模式,在用户登录完成并保存令牌后,您可以弹出模式并它将显示用户之前所在的页面。