如何打开浏览器并在.net MAUI中侦听重定向?



我正在创建一个。net MAUI应用程序,并希望集成Firebase身份验证。我使用FirebaseAuthentication.net NuGet包与API交互,它为我提供了一个SignInWithRedirect方法。该方法将URL传递给委托函数,根据文档,委托函数必须使用URL打开web浏览器,并以某种方式将重定向返回到MAUI。我发现打开MAUI浏览器的唯一方法如下:

await client.SignInWithRedirectAsync(FirebaseProviderType.Google, async uri =>
{
-->   return await Browser.Default.OpenAsync(uri, BrowserLaunchMode.External);
});

然而,问题是这只返回一个布尔值,说明浏览器是否成功打开。有没有别的方法可以让我在毛伊岛完成我想做的事?

编辑:添加了一个带有WebAuthenticator的代码示例(由于缺少初始状态而导致无法处理请求)。如果浏览器sessionStorage无法访问或被意外清除,可能会发生这种情况。浏览器出现错误)使用Firebase初始化的登录服务:
public LoginService(IHttpService httpService)
{
var config = new FirebaseAuthConfig
{
ApiKey = API_KEY,
AuthDomain = DOMAIN,
Providers = new FirebaseAuthProvider[]
{
new EmailProvider(),
new FacebookProvider(),
new GoogleProvider()
},
};
client = new FirebaseAuthClient(config);

_httpService = httpService;
}

初始化验证器的实际函数:

public async Task<bool> GoogleLogin()
{
try
{
await client.SignInWithRedirectAsync(FirebaseProviderType.Google, async uri =>
{
var options = new WebAuthenticatorOptions
{
Url = new Uri(uri),
CallbackUrl = new Uri("com.companyname.myappname.maui://callback/"),
};

var res = await WebAuthenticator.Default.AuthenticateAsync(options);
return "";
});
return false;
}
catch (Exception ex)
{
return false;
}
}

基于MS docs指令添加到Android平台的活动:

using Android.App;
using Android.Content.PM;
namespace YourNameSpace;
[Activity(NoHistory = false, LaunchMode = LaunchMode.SingleTop, Exported = true)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
DataPath = "/callback/",
DataScheme = "com.companyname.myappname.maui")]
public class WebAuthenticationCallbackActivity : WebAuthenticatorCallbackActivity
{
}

如果我理解正确,您想要类似于以下的功能吗?

Net MAUI WebAuthenticator CallbackUrl用于社交登录

您可以在API配置中设置CallbackPath属性,如下所示:

.AddGoogle(g => { 
g.ClientId = "{Client ID}"; 
g.ClientSecret = "{Client Secret}"; 
g.CallbackPath = "/mobileauth"; //mobileauth is api controller 
g.SaveTokens = true; })

相关内容

  • 没有找到相关文章

最新更新