我正在开发一个可在 iOS、Android 和 Windows 设备上使用的 .NET MAUI 应用程序。
总的来说,我发现在任何 .NET 应用程序中集成时都缺乏有关 Firebase 的文档。 特别是,鉴于 .NET Maui 的受欢迎程度迅速上升,我没有看到任何关于允许我的 MAUI 应用程序通过使用 Google 或 Facebook 登录添加 Firebase 身份验证的建议。 也许文档还没有跟上?
这是我的 Firebase 项目中的项目设置的屏幕截图。
我是否需要先配置 Android 应用程序,然后再配置 iOS 应用程序才能登录 Google?
如果有人已经为 .NET MAUI 完成了此任务并可以提供一些指导,我会洗耳恭听。
我目前正在此处学习 Xamarin 教程:https://www.youtube.com/watch?v=NYMCrD9klA0
该方法是创建一个具有自定义代理设置的 webview,然后使用事件进行导航,最后使用 firebase 创建一个项目并将其像 Web 应用程序凭据一样链接,并记住在云凭据中设置重定向 url。
以下是代码和步骤:
步骤 1. 从 nuget 下载 FirebaseAuthentication.net
步骤2 c#.
public LoginPage()
{
InitializeComponent();
webView.Navigated += WebView_Navigated;
webView.UserAgent = "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Mobile Safari/537.36";
}
private async void ImageButton_Clicked(object sender, EventArgs e)
{
var provider = MauiProgram.firebaseconfig.Providers[0].ProviderType;
// Get the credentials
userCredential = await MauiProgram.firebaseclient.SignInWithRedirectAsync(provider, async uri =>
{
redirectUri = uri; // Save URI from provider
webView.Source = uri;
webView.IsVisible = true;
webView.Opacity = 1;
// waiting for the user navigate to the final
string finalUrl = await WaitForNavigationToUrlAsync("https://test-23def.web.app/__/auth/handler");
Console.WriteLine($"User has navigated to: {finalUrl}");
webView.Opacity = 0;
return finalUrl;
});
if (userCredential != null) {
Console.WriteLine("ACCESS GRANTED");
Console.WriteLine($"You're signed in as {userCredential.User.Uid} | {userCredential.User.Info.DisplayName} | {userCredential.User.Info.Email}");
await DisplayAlert("Sign In", "Welcome: " + userCredential.User.Info.DisplayName, "OK");
IsLogged = true;
}
}
private async Task<string> WaitForNavigationToUrlAsync(string targetUrl)
{
var tcs = new TaskCompletionSource<string>();
// Suscrite to event Navigated
webView.Navigated += (sender, e) =>
{
Console.WriteLine($"WaitForNavigation Navigated to: {e.Url}");
if (e.Url.StartsWith(targetUrl))
{
// Finish the task if your already logged in
tcs.SetResult(e.Url);
}
};
// Waiting for finish the task
return await tcs.Task;
}
第 3 步。在您的 MauiProgram.cs 中
public static MauiApp CreateMauiApp()
{
//...
builder.RegisterFirebase();
//...
}
private static MauiAppBuilder RegisterFirebase(this MauiAppBuilder builder)
{
builder.ConfigureLifecycleEvents(events =>
{
events.AddAndroid(android => android.OnCreate((activity, bundle) =>
{
var tmp = Firebase.FirebaseApp.InitializeApp(activity);
Gauth = FirebaseAuth.GetInstance(tmp);
}));
firebaseconfig = new CustomFirebaseAuthConfig
{
//WEB APIKEY
ApiKey = "AIzaSyDt3yuVke7GAtqYQ3LSEL2C0l-UeETozNw",
AuthDomain = "test-23def.web.app",
Providers = new Firebase.Auth.Providers.FirebaseAuthProvider[]
{
new GoogleProvider().AddScopes("email"),
new FacebookProvider(),
new TwitterProvider(),
new GithubProvider(),
new MicrosoftProvider(),
new EmailProvider()
}
};
firebaseclient = new FirebaseAuthClient(firebaseconfig);
});
return builder;
}
第 4 步:创建一个 Firebase 项目。
参考资料:
https://github.com/step-up-labs/firebase-authentication-dotnet/blob/master/README.md