在 Google.Apis.Auth 中启动浏览器时出错。OAuth2.LocalServerCodeReceiver Android

Error launching browser in Google.Apis.Auth.OAuth2.LocalServerCodeReceiver on Android

我正在尝试在用 C# (Xamarin.Android) 编写的 android 应用程序中对最终用户进行身份验证。

我决定尝试使用 NuGet 包 Google.Apis.Oauth.v2,它似乎公开了一个易于使用的 Oauth 客户端。

LocalServerCodeReceiver.ReceiveCodeAsync 抛出以下内容:

我得到System.NotSupportedException:"Failed to launch browser with https://XXX.auth.XXX.amazoncognito.com/login?response_type=token&client_id=XXX&redirect_uri=https%3A%2F%2Fwww.google.com&scope=profile%20openid%20email for authorization. See inner exception for details."

它有一个内部异常 System.ComponentModel.Win32Exception:"Cannot find the specified file"

代码:

var clientSecret = new Google.Apis.Auth.OAuth2.ClientSecrets();
clientSecret.ClientId = ...
clientSecret.ClientSecret = ...

var initializer = new Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow.Initializer(
    "https://XXX.auth.XXX.amazoncognito.com/login",
    "https://XXX.auth.XXX.amazoncognito.com/login");
initializer.Scopes = new List<string> {"profile", "openid", "email"};
initializer.ClientSecrets = clientSecret;
var flow = new Google.Apis.Auth.OAuth2.Flows.AuthorizationCodeFlow(initializer);

var authCodeRequestURL = flow.CreateAuthorizationCodeRequest("https://www.google.com");
authCodeRequestURL.ResponseType = "token";
var uri = authCodeRequestURL.Build();

var cancellationTokenSource = new System.Threading.CancellationTokenSource();

var codeReceiver = new Google.Apis.Auth.OAuth2.LocalServerCodeReceiver();
var task = codeReceiver.ReceiveCodeAsync(authCodeRequestURL, cancellationTokenSource.Token);

抱歉,Google.Apis.Oauth.v2 不支持 Xamarin,并且没有简单的方法让它工作。 遗憾的是,目前没有 Google.Apis.* 个包支持 Xamarin。

您可能会发现 Xamarin.Auth 包可以满足您的需求?

我已经弄清楚如何在浏览器中完成身份验证后重定向到应用程序。

它被称为 "Deep Link" 并记录在 enter link description here,本质上你需要在你的 Activity 上声明一个 IntentFilter,它注册到 Android OS 如果有人点击或页面重定向到特定 URI,您的应用程序将被调用。然后可以在您的应用程序中读取附加到 URI 的令牌。