gpt4 book ai didi

c# - 使用 Xamarin.Forms 进行 session 管理 (Android)

转载 作者:行者123 更新时间:2023-11-30 02:45:57 29 4
gpt4 key购买 nike

首先,我不确定我在设计方面是否采用了最佳方式,但我对 Android 有点陌生,对 Xamarin.Forms 也很陌生。我的设置是 Xamarin.Forms PCL 中的一系列 ContentPage,它们都处理来自 REST 服务的信息。该服务在登录后授予一个 WorkToken,然后应用程序会保留该 token 以执行进一步的操作。我将其存储在 ISessionManager 中。

我的问题是工作流程问题。我有一个 LoginPage,如果他们的 session 结束/出现故障/无论怎样,我想向用户展示它;基本上,如果他们没有登录并尝试做任何事情,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,让他们从中断的地方继续。大多数情况下,所有这些都发生在 PCL 中,但我创建了一个 ISessionManager 的 Android 实现,它在每个 ContentPage 的覆盖 OnAppearing 方法。每个页面调用 ISessionManagerCheckLogin 将执行此操作,如果他们未登录,它将创建一个 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 中的基本导航工作流之外没有发现太多内容。

编辑:我发现了一些类似于我在这里尝试做的事情:How to pass variables from a new intent back to the class that created it in android ,但在 Xamarin.Forms 的上下文中。 startActivityForResult 如果它存在于 Forms.Context 中就可以解决我的问题,但似乎没有等效项。

最佳答案

为什么要创建 LoginActivity?是因为你需要使用 android 原生的东西吗?

我首先想到的是,在 OnAppearing 上检查 token 状态后,您可以决定是否推送登录页面的模式,在用户登录完成并保存 token 后,您可以弹出模态,它将显示用户所在的上一页。

关于c# - 使用 Xamarin.Forms 进行 session 管理 (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025989/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com