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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:50:14