Android 浏览器上的事件在IdentityModel.OidcClient中休眠或关闭

Android 浏览器上的事件在IdentityModel.OidcClient中休眠或关闭,android,xamarin.forms,identityserver4,Android,Xamarin.forms,Identityserver4,我在后端使用IdentityServer,在客户端使用Xamarin.Forms Asnroid应用程序添加混合身份验证。所有这些都可以在浏览器打开的情况下正常工作,并且可以在没有任何问题的情况下登录 现在,我有一个场景,用户进入打开页面并单击登录,浏览器打开并显示登录页面,然后他们决定关闭/关闭浏览器或在Android中休眠。它肯定会回到第一页。但我也想在开场白中捕捉这一事件。因为如果没有先登录,下面的代码不会返回任何内容 _result = await _client.LoginAsync(

我在后端使用IdentityServer,在客户端使用Xamarin.Forms Asnroid应用程序添加混合身份验证。所有这些都可以在浏览器打开的情况下正常工作,并且可以在没有任何问题的情况下登录

现在,我有一个场景,用户进入打开页面并单击登录,浏览器打开并显示登录页面,然后他们决定关闭/关闭浏览器或在Android中休眠。它肯定会回到第一页。但我也想在开场白中捕捉这一事件。因为如果没有先登录,下面的代码不会返回任何内容

_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上也不会返回任何内容。谢谢