Android 浏览器上的事件在IdentityModel.OidcClient中休眠或关闭
我在后端使用IdentityServer,在客户端使用Xamarin.Forms Asnroid应用程序添加混合身份验证。所有这些都可以在浏览器打开的情况下正常工作,并且可以在没有任何问题的情况下登录 现在,我有一个场景,用户进入打开页面并单击登录,浏览器打开并显示登录页面,然后他们决定关闭/关闭浏览器或在Android中休眠。它肯定会回到第一页。但我也想在开场白中捕捉这一事件。因为如果没有先登录,下面的代码不会返回任何内容Android 浏览器上的事件在IdentityModel.OidcClient中休眠或关闭,android,xamarin.forms,identityserver4,Android,Xamarin.forms,Identityserver4,我在后端使用IdentityServer,在客户端使用Xamarin.Forms Asnroid应用程序添加混合身份验证。所有这些都可以在浏览器打开的情况下正常工作,并且可以在没有任何问题的情况下登录 现在,我有一个场景,用户进入打开页面并单击登录,浏览器打开并显示登录页面,然后他们决定关闭/关闭浏览器或在Android中休眠。它肯定会回到第一页。但我也想在开场白中捕捉这一事件。因为如果没有先登录,下面的代码不会返回任何内容 _result = await _client.LoginAsync(
_result = await _client.LoginAsync(new LoginRequest());
我还使用示例后面的chromecustomabsbbrowser.cs
public class ChromeCustomTabsBrowser : IBrowser
{
private readonly Activity _context;
private readonly CustomTabsActivityManager _manager;
public ChromeCustomTabsBrowser() :
this CrossCurrentActivity.Current.Activity) { }
public ChromeCustomTabsBrowser(Activity context)
{
_context = context;
_manager = new CustomTabsActivityManager(_context);
}
public Task<BrowserResult> InvokeAsync(BrowserOptions options)
{
var task = new TaskCompletionSource<BrowserResult>();
var builder = new CustomTabsIntent.Builder(_manager.Session)
.SetToolbarColor(Color.Argb(255, 52, 152, 219))
.SetShowTitle(true)
.EnableUrlBarHiding();
var customTabsIntent = builder.Build();
// ensures the intent is not kept in the history stack, which makes
// sure navigating away from it will close it
customTabsIntent.Intent.AddFlags(ActivityFlags.NoHistory);
Action<string> callback = null;
callback = url =>
{
OidcCallbackActivity.Callbacks -= callback;
task.SetResult(new BrowserResult()
{
Response = url
});
};
OidcCallbackActivity.Callbacks += callback;
customTabsIntent.LaunchUrl(_context,
Android.Net.Uri.Parse(options.StartUrl));
return task.Task;
}
}
公共类chromecustomabsbrowser:IBrowser
{
私有只读活动\u上下文;
私有只读自定义选项卡活动管理器(U manager);
公共ChromeCustomAbsBrowser():
此CrossCurrentActivity.Current.Activity){}
公共ChromeCustomAbsBrowser(活动上下文)
{
_上下文=上下文;
_manager=新的CustomTabsActivityManager(_上下文);
}
公共任务InvokeAsync(浏览选项)
{
var task=new TaskCompletionSource();
var builder=new customtabsinent.builder(_manager.Session)
.SetToolbarColor(Color.Argb(255、52、152、219))
.SetShowTitle(正确)
.EnableUrlBarHiding();
var customtabsinent=builder.Build();
//确保意图不保留在历史堆栈中,这会导致
//当然,离开它会关闭它
CustomTabsInt.Intent.AddFlags(ActivityFlags.NoHistory);
动作回调=null;
回调=url=>
{
OidcCallbackActivity.Callbacks-=回调;
task.SetResult(新的BrowserResult()
{
响应=url
});
};
OidcCallbackActivity.Callbacks+=回调;
CustomTabsInt.LaunchUrl(\u上下文,
Android.Net.Uri.Parse(options.StartUrl));
返回任务。任务;
}
}
是否有其他方法来捕捉这一事件?我希望在进行混合身份验证时,可以点击一个事件,例如:
\u client.OnBrowserClosed+=…
或者
\u client.OnBrowserTabClosed+=…
谢谢。事实证明,我没有添加
LaunchMode = LaunchMode.SingleTask
在Android MainActivity上。将LaunchMode设置为SingleTask时,_client.LoginAsync是否在关闭时返回结果,或者您是否在OnResume上抓取该事件?iOS正确地返回带有“UserCancel”消息的错误,但Android即使在SingleTask上也不会返回任何内容。谢谢