Xamarin Forms借助Firebase实现Google登录兼容问题咨询
Xamarin Forms Firebase Google登录适配方案
你遇到的包不兼容报错是正常现象:
Xamarin.GooglePlayServices.Auth、Xamarin.Firebase.Auth均为平台特定NuGet包,仅支持Android/iOS平台项目,本身就不兼容netstandard2.0,不需要尝试安装到共享库中。
以下是两种可落地的实现方案:
方案1:通过Xamarin Forms依赖服务实现(原生封装,兼容性最好)
第一步:共享库定义服务接口
在共享库项目中新建身份验证服务接口,不需要引用任何平台包:
public interface IGoogleAuthService { /// <summary> /// 发起Google登录,返回用户Id Token /// </summary> Task<string> LoginAsync(); /// <summary> /// 退出Google登录 /// </summary> Task LogoutAsync(); }
在MainLogin.xaml的Google登录按钮点击事件中,直接调用依赖服务:
private async void GoogleLoginBtn_Clicked(object sender, EventArgs e) { var authService = DependencyService.Get<IGoogleAuthService>(); var userToken = await authService.LoginAsync(); // 在此处补充token验证、跳转主页等后续逻辑 }
第二步:Android平台实现接口
确认Android项目已安装Xamarin.GooglePlayServices.Auth、Xamarin.Firebase.Auth包,google-services.json文件的生成操作设置为GoogleServicesJson。
在Android项目中新建接口实现类:
[assembly: Dependency(typeof(GoogleAuthService_Android))] namespace MySignInApp.Droid.Implementations { public class GoogleAuthService_Android : IGoogleAuthService { public async Task<string> LoginAsync() { // 在此处写入你参考的原生Android Google登录逻辑,返回获取到的Id Token即可 } public Task LogoutAsync() { // 写入原生退出登录逻辑 return Task.CompletedTask; } } }
第三步:iOS平台实现接口
iOS端安装Xamarin.Firebase.iOS.Auth、Xamarin.Google.SignIn包,完成Firebase后台iOS应用配置后,同样在iOS项目中新建接口实现类:
[assembly: Dependency(typeof(GoogleAuthService_iOS))] namespace MySignInApp.iOS.Implementations { public class GoogleAuthService_iOS : IGoogleAuthService { public async Task<string> LoginAsync() { // 写入iOS原生Google登录逻辑,返回Id Token } public Task LogoutAsync() { // 写入iOS原生退出登录逻辑 return Task.CompletedTask; } } }
方案2:使用预封装的Forms兼容NuGet包(开发效率更高)
可以直接使用支持Xamarin Forms的Firebase认证封装包,比如Plugin.FirebaseAuth,该包已经完成了多平台适配,只需要在共享库和各平台项目中安装对应版本,即可直接在共享代码中调用Google登录相关API,不需要自行编写依赖服务实现。
内容的提问来源于stack exchange,提问作者Steven Sann
相关产品推荐
相关产品推荐

