Android Kotlin Compose移动网络无法使用Firebase Auth认证求助
排查Firebase Auth移动网络认证失败问题
一、先补全错误日志,获取真实异常信息
你的错误分支仅打印了通用提示,没有输出具体异常细节,这是定位问题的关键缺失项。先修改ViewModel代码,把错误信息完整打出来:
fun login(email: String, password: String, onSuccess: () -> Unit){ auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener { task -> if(task.isSuccessful){ showProgressBar = false onSuccess() Log.d("Login", "User login") } else { // 打印完整异常信息,包括堆栈 val exception = task.exception Log.e("Login", "Login failed: ${exception?.message}", exception) showProgressBar = true showAlert = true } } }
没有具体错误日志,几乎无法精准定位移动网络下的静默失败原因。
二、检查Android网络权限配置
确认AndroidManifest.xml中已添加必要的网络权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
部分移动网络环境下,权限缺失可能导致请求被静默拦截,而非抛出明确错误。
三、排查移动网络环境限制
- 测试移动网络下能否正常访问Firebase依赖的域名(如
https://www.googleapis.com),部分运营商会拦截HTTPS请求或存在代理限制。 - 检查设备是否开启VPN、全局代理,这类设置可能阻断Firebase的认证请求。
- 确认移动网络的APN配置是否为默认值,自定义APN可能限制特定网络请求。
四、调整Firebase Auth网络适配配置
部分移动网络对HTTP/2支持不佳,可强制Firebase Auth使用HTTP/1.1,在AndroidManifest.xml的application标签内添加:
<meta-data android:name="com.google.firebase.auth.FIREBASE_AUTH_HTTP_CONFIG" android:value="HTTP/1.1" />
同时确保google-services.json是从Firebase控制台下载的最新版本,避免配置过期导致的网络请求失败。
五、修复代码逻辑的潜在问题
- 按钮代码中的
delay(timeDelay)完全多余,会延迟认证请求且可能导致UI状态混乱,直接移除:
scope.launch { showProgressIndicator = true loginViewModel.login(email, password) { navController.navigate(NavigationViews.Home.Wells.route){ launchSingleTop = true popUpTo(NavigationViews.Login.route){ inclusive = true } } showProgressIndicator = loginViewModel.showProgressBar } }
- 确认ViewModel中的状态变量是可观察的
MutableState,否则UI无法感知状态更新,导致你误以为认证未完成:
// ViewModel内的变量定义 var showProgressBar by mutableStateOf(true) var showAlert by mutableStateOf(false)
六、添加即时失败监听
Firebase Auth的onCompleteListener可能在弱网下长时间等待,添加addOnFailureListener可捕获即时失败:
auth.signInWithEmailAndPassword(email, password) .addOnFailureListener { exception -> Log.e("Login", "Auth failed immediately: ${exception.message}", exception) showProgressBar = true showAlert = true } .addOnCompleteListener { task -> // 原有成功逻辑 }
优先完成第一步获取异常信息,再结合后续步骤逐一排查,基本可以定位移动网络下的认证问题。
内容的提问来源于stack exchange,提问作者Gibran Portillo
相关产品推荐
相关产品推荐

