如何在 .NET MAUI 应用程序中通过 Firebase 实现 Google 登录

问题描述 投票:0回答:1

我正在开发一个可在 iOS、Android 和 Windows 设备上使用的 .NET MAUI 应用程序。

总的来说,我发现在任何 .NET 应用程序中集成时都缺乏有关 Firebase 的文档。 特别是,鉴于 .NET Maui 的受欢迎程度迅速上升,我没有看到任何关于允许我的 MAUI 应用程序通过使用 Google 或 Facebook 登录添加 Firebase 身份验证的建议。 也许文档还没有跟上?

这是我的 Firebase 项目中的项目设置的屏幕截图。

我是否需要先配置 Android 应用程序,然后再配置 iOS 应用程序才能登录 Google?

Do I need to configure an Android app and then an iOS here for Google login?

如果有人已经为 .NET MAUI 完成了此任务并可以提供一些指导,我会洗耳恭听。

我目前正在此处学习 Xamarin 教程:https://www.youtube.com/watch?v=NYMCrD9klA0

firebase xamarin google-signin maui
1个回答
0
投票

该方法是创建一个具有自定义代理设置的 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 项目。

第5步.云重定向: enter image description here

enter image description here 我希望它对某人有帮助。

参考资料:

https://github.com/step-up-labs/firebase-authentication-dotnet/blob/master/README.md

Web Google Auth - 403 的解决方法:disallowed_useragent 存在吗?

https://www.youtube.com/watch?v=nE2uFysVqLU

© www.soinside.com 2019 - 2024. All rights reserved.