Unity构建Android APK后Firebase认证失效,编辑器运行正常
Unity Firebase Auth打包APK后卡在依赖检查的解决方案
问题场景
Unity开发的应用集成Firebase Auth,编辑器内注册、登录及数据交互完全正常,但打包为APK安装到安卓设备后,注册/登录无响应,调试发现代码卡在FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread处,推测Auth对象初始化异常。已尝试添加网络权限、调整google-services.json位置、添加meta-data配置,但问题未解决。
可行解决方案
1. 排查SDK与Unity版本兼容性
Firebase SDK和Unity版本不兼容是这类问题的常见根源:
- 确认使用的Firebase SDK版本与你的Unity版本匹配(比如Unity 2020+建议使用Firebase 8.0+版本),避免混用过于老旧或超前的SDK包。
- 卸载当前Firebase SDK,重新从Firebase控制台下载对应版本的Unity SDK包导入项目。
2. 修正Gradle配置
Unity默认的Gradle模板可能缺少Firebase必要的配置:
- 打开
Edit > Project Settings > Player > Android > Publishing Settings,勾选Use Custom Gradle Template。 - 编辑
Assets/Plugins/Android/mainTemplate.gradle,在buildscript的dependencies块中添加:classpath 'com.google.gms:google-services:4.3.15' - 在文件末尾添加:
apply plugin: 'com.google.gms.google-services' - 同时确保Gradle版本不低于6.7.1(可在
Project Settings > Player > Android > Gradle Settings中调整)。
3. 检查设备Google Play服务版本
安卓设备上Google Play Services版本过低会直接导致Firebase初始化失败:
- 在设备的应用商店中搜索并更新Google Play服务。
- 可以在代码中添加预检查逻辑,提前提示用户更新:
在Firebase初始化前调用此方法。void CheckGooglePlayServicesStatus() { int resultCode = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(UnityEngine.Application.Context); if (resultCode != ConnectionResult.Success) { if (GoogleApiAvailability.Instance.IsUserResolvableError(resultCode)) { GoogleApiAvailability.Instance.GetErrorDialog(UnityEngine.Application.Context, resultCode, 9000).Show(); } else { Debug.LogError("当前设备不支持Google Play服务,无法使用Firebase功能"); } } }
4. 确保google-services.json配置正确
- 从Firebase控制台重新下载
google-services.json,确认文件中的包名与Unity项目的Bundle Identifier完全一致(大小写、字符都要匹配)。 - 将文件放在
Assets/目录下,执行Firebase > Tools > Refresh Firebase让Unity重新导入配置。 - 检查打包时是否将该文件正确嵌入APK:可以解压APK,查看
assets/google-services.json是否存在。
5. 添加异步任务异常捕获
当前代码可能因未捕获异常导致流程中断,修改初始化代码,添加异常处理:
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => { if (task.IsFaulted) { foreach (var exception in task.Exception.Flatten().InnerExceptions) { Debug.LogError("Firebase初始化异常: " + exception.Message); } return; } var dependencyStatus = task.Result; if (dependencyStatus == DependencyStatus.Available) { // 正常初始化Auth FirebaseAuth auth = FirebaseAuth.DefaultInstance; // 后续业务逻辑 } else { Debug.LogError($"无法解析Firebase依赖: {dependencyStatus}"); } });
打包后通过Android Studio的Logcat查看具体错误信息,定位问题根源。
6. 清理不必要的Manifest配置
删除手动添加的com.google.android.gms.version meta-data,Firebase SDK会自动管理Google Play服务版本,手动指定可能导致版本冲突。同时确保Manifest中包含必要权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
内容的提问来源于stack exchange,提问作者Adam Jones
相关产品推荐
相关产品推荐

