我已经创建了一个 Xamarin 表单 android 应用程序。我正在使用我的 Xamarin 应用程序分享照片。
我的要求是在我第一次使用我的应用程序分享内容时登录该应用程序。
对于登录,我使用 WebAuthenticator 来支持 OAuth2。这工作正常并重定向到我的应用程序,但 google chrome 浏览器仍在后台打开。它没有关闭。
对于正常的应用程序登录,它会关闭浏览器,但如果我通过我的应用程序共享某些内容并登录,则 bowser 不会关闭。所以看起来当 Intent 是 SEND 它永远不会关闭浏览器。
添加以下代码用于 WebAuthenticator 身份验证
var authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
{
Url = new Uri($"{_baseUrl}"),
CallbackUrl = new Uri("callback://")
});
WebAuthenticationCallbackActivity 代码如下。
[Activity(NoHistory = true, LaunchMode = Android.Content.PM.LaunchMode.SingleTop, Exported = true)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
DataScheme = "callback")]
public class WebAuthenticationCallbackActivity : Xamarin.Essentials.WebAuthenticatorCallbackActivity
{
}
在 Android 清单文件中添加以下内容。
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
我错过了什么,所以它没有关闭浏览器?
github 上存在关于 WebAuthenticator.AuthenticateAsync 不关闭 Android 浏览器 的问题。
此问题已在 Xamarin.Essential nuget 包版本 1.6 中得到解决。你可以尝试将项目中的包更新到最新版本。