You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用.NET Standard共享代码开发跨安卓iOS的Firebase邮箱/密码认证?

当然可行!Firebase 邮箱/密码认证完全可以和基于 .NET Standard 的 Xamarin.Forms 项目集成,我给你梳理下完整的实现流程和代码示例,帮你快速上手。

第一步:准备 Firebase 项目配置
  1. 登录 Firebase 控制台,创建或选择你的项目
  2. 在Authentication模块中,启用「邮箱/密码」登录方式
  3. 下载平台配置文件:
    • Android:下载google-services.json,放到 Android 项目根目录,设置生成操作为GoogleServicesJson
    • iOS:下载GoogleService-Info.plist,放到 iOS 项目根目录,设置生成操作为BundleResource
第二步:安装必要的 NuGet 包

在 Android 和 iOS 项目中分别安装对应的 Firebase Auth 包:

  • Android 项目:安装Xamarin.Firebase.Auth和Xamarin.Firebase.Core
  • iOS 项目:安装Xamarin.Firebase.iOS.Auth和Xamarin.Firebase.iOS.Core
第三步:创建共享的认证服务接口

在你的 .NET Standard 共享项目中,定义跨平台的认证接口,统一调用逻辑:

public interface IFirebaseAuthService
{
    // 邮箱密码登录
    Task<string> SignInWithEmailAndPassword(string email, string password);
    // 注册新用户
    Task<string> CreateUserWithEmailAndPassword(string email, string password);
    // 登出
    Task SignOut();
}
第四步:实现 Android 平台的认证服务

在 Android 项目中实现上述接口,通过依赖注入让共享项目调用:

[assembly: Dependency(typeof(FirebaseAuthServiceAndroid))]
namespace YourAppNamespace.Droid
{
    public class FirebaseAuthServiceAndroid : IFirebaseAuthService
    {
        public FirebaseAuthServiceAndroid()
        {
            // 初始化 Firebase
            FirebaseApp.InitializeApp(Android.App.Application.Context);
        }

        public async Task<string> SignInWithEmailAndPassword(string email, string password)
        {
            try
            {
                var authResult = await FirebaseAuth.Instance.SignInWithEmailAndPasswordAsync(email, password);
                return authResult.User.Uid;
            }
            catch (FirebaseAuthInvalidUserException)
            {
                throw new Exception("用户不存在或已被禁用");
            }
            catch (FirebaseAuthInvalidCredentialsException)
            {
                throw new Exception("邮箱或密码错误");
            }
            catch (Exception ex)
            {
                throw new Exception($"登录失败:{ex.Message}");
            }
        }

        public async Task<string> CreateUserWithEmailAndPassword(string email, string password)
        {
            try
            {
                var authResult = await FirebaseAuth.Instance.CreateUserWithEmailAndPasswordAsync(email, password);
                return authResult.User.Uid;
            }
            catch (FirebaseAuthWeakPasswordException)
            {
                throw new Exception("密码强度不足,至少需要6个字符");
            }
            catch (FirebaseAuthInvalidCredentialsException)
            {
                throw new Exception("邮箱格式无效");
            }
            catch (FirebaseAuthUserCollisionException)
            {
                throw new Exception("该邮箱已被注册");
            }
            catch (Exception ex)
            {
                throw new Exception($"注册失败:{ex.Message}");
            }
        }

        public Task SignOut()
        {
            FirebaseAuth.Instance.SignOut();
            return Task.CompletedTask;
        }
    }
}
第五步:实现 iOS 平台的认证服务

在 iOS 项目中完成接口实现:

[assembly: Dependency(typeof(FirebaseAuthServiceiOS))]
namespace YourAppNamespace.iOS
{
    public class FirebaseAuthServiceiOS : IFirebaseAuthService
    {
        public FirebaseAuthServiceiOS()
        {
            // 初始化 Firebase
            Firebase.Core.App.Configure();
        }

        public async Task<string> SignInWithEmailAndPassword(string email, string password)
        {
            try
            {
                var authResult = await Auth.DefaultInstance.SignInWithPasswordAsync(email, password);
                return authResult.User.Uid;
            }
            catch (NSErrorException ex)
            {
                HandleFirebaseError(ex.Error);
                return null;
            }
        }

        public async Task<string> CreateUserWithEmailAndPassword(string email, string password)
        {
            try
            {
                var authResult = await Auth.DefaultInstance.CreateUserAsync(email, password);
                return authResult.User.Uid;
            }
            catch (NSErrorException ex)
            {
                HandleFirebaseError(ex.Error);
                return null;
            }
        }

        public Task SignOut()
        {
            try
            {
                Auth.DefaultInstance.SignOut(out NSError error);
                if (error != null)
                    throw new Exception(error.LocalizedDescription);
                return Task.CompletedTask;
            }
            catch (Exception ex)
            {
                throw new Exception($"登出失败:{ex.Message}");
            }
        }

        private void HandleFirebaseError(NSError error)
        {
            switch ((AuthErrorCode)error.Code)
            {
                case AuthErrorCode.UserNotFound:
                    throw new Exception("用户不存在或已被禁用");
                case AuthErrorCode.WrongPassword:
                    throw new Exception("邮箱或密码错误");
                case AuthErrorCode.WeakPassword:
                    throw new Exception("密码强度不足,至少需要6个字符");
                case AuthErrorCode.InvalidEmail:
                    throw new Exception("邮箱格式无效");
                case AuthErrorCode.EmailAlreadyInUse:
                    throw new Exception("该邮箱已被注册");
                default:
                    throw new Exception($"操作失败:{error.LocalizedDescription}");
            }
        }
    }
}
第六步:在 Xamarin.Forms 页面中调用服务

假设你已经有了包含邮箱输入框、密码输入框和登录/注册按钮的 XAML 页面,在后台代码中调用认证服务:

public partial class LoginPage : ContentPage
{
    private readonly IFirebaseAuthService _authService;

    public LoginPage()
    {
        InitializeComponent();
        _authService = DependencyService.Get<IFirebaseAuthService>();
    }

    private async void LoginBtn_Clicked(object sender, EventArgs e)
    {
        string email = EmailEntry.Text?.Trim();
        string password = PasswordEntry.Text?.Trim();

        if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
        {
            await DisplayAlert("提示", "请输入完整的邮箱和密码", "确定");
            return;
        }

        try
        {
            string userId = await _authService.SignInWithEmailAndPassword(email, password);
            await DisplayAlert("登录成功", $"用户ID:{userId}", "确定");
            // 跳转到主页
            await Navigation.PushAsync(new MainPage());
        }
        catch (Exception ex)
        {
            await DisplayAlert("登录失败", ex.Message, "确定");
        }
    }

    private async void RegisterBtn_Clicked(object sender, EventArgs e)
    {
        string email = EmailEntry.Text?.Trim();
        string password = PasswordEntry.Text?.Trim();

        if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password))
        {
            await DisplayAlert("提示", "请输入完整的邮箱和密码", "确定");
            return;
        }

        try
        {
            string userId = await _authService.CreateUserWithEmailAndPassword(email, password);
            await DisplayAlert("注册成功", $"用户ID:{userId}", "确定");
        }
        catch (Exception ex)
        {
            await DisplayAlert("注册失败", ex.Message, "确定");
        }
    }
}

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:01