C# 使用Xamarin.Forms(Android)进行会话管理

C# 使用Xamarin.Forms(Android)进行会话管理,c#,android,xamarin.forms,C#,Android,Xamarin.forms,首先,我不确定这是否是设计的最佳方式,但我对Android有点陌生,对Xamarin.Forms也很陌生。我的设置是Xamarin.Forms PCL中的一系列ContentPages,它们都处理来自REST服务的信息。此服务在登录时授予应用程序持有的WorkToken,以便执行进一步的操作。我正在将其存储在ISessionManager中 我的问题是工作流问题。我有一个LoginPage,如果用户的会话已结束/出现故障/无论什么,我都想向用户展示该页面;基本上,如果他们没有登录并尝试执行任何操

首先,我不确定这是否是设计的最佳方式,但我对Android有点陌生,对Xamarin.Forms也很陌生。我的设置是Xamarin.Forms PCL中的一系列
ContentPage
s,它们都处理来自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中的基本导航工作流之外,我还没有找到更多其他内容


编辑:我发现了一些类似于我在这里尝试做的事情:,但是在Xamarin.Forms的上下文中。如果
Forms.Context
中存在的
startActivityForResult
可以解决我的问题,但似乎没有等效项。

为什么要创建LoginActivity?是不是因为你需要使用安卓的原生软件


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

对不起,我迟到了。这似乎很有效。谢谢你,芮。