【问题标题】:Session Management with Xamarin.Forms (Android)使用 Xamarin.Forms (Android) 进行会话管理
【发布时间】:2014-09-21 10:55:52
【问题描述】:

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

我的问题是工作流程问题。我有一个LoginPage,如果他们的会话已经结束/出现故障/无论如何,我想将其呈现给用户;基本上,如果他们没有登录并尝试做任何事情,我想将此页面推送到堆栈上并强制他们尝试登录,如果他们提供有效的凭据,让他们继续他们离开的地方。大多数情况下,所有这些都发生在 PCL 中,但我创建了一个 ISessionManager 的 Android 实现,它在每个 ContentPage 的覆盖 OnAppearing 方法上进行查询。每个页面都会调用ISessionManagerCheckLogin,它会这样做,如果他们没有登录,它将创建一个Intent 并通过它启动LoginActivityLoginActivity 本质上只是包裹了 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 的上下文中。如果 Forms.Context 中存在 startActivityForResult 将解决我的问题,但似乎没有等价物。

【问题讨论】:

    标签: c# android xamarin.forms


    【解决方案1】:

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

    我的第一个想法是,在您检查 OnAppearing 上的令牌状态后,您可以决定是否推送登录页面的模式,在用户登录完成并保存令牌后,您可以弹出modal,它将显示用户的上一页。

    【讨论】:

    • 抱歉迟到了。这似乎工作得很好。谢谢瑞。
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 2012-12-15
    • 2013-12-18
    • 1970-01-01
    • 2016-04-26
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多