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

Android Kotlin Firebase Google登录LifecycleOwner注册异常

问题根因

报错是因为registerForActivityResult的注册时机错误:

  • 你把注册逻辑写在了按钮的点击监听回调里,用户点击按钮时Activity已经处于RESUMED状态,违反了Activity Result API的规则:LifecycleOwner必须在生命周期进入STARTED状态前完成注册调用
  • 另外你的回调逻辑还有一处错误:获取登录结果时传入了自己创建的发起登录用Intent,实际上应该用系统返回的结果Intent,否则无法正确读取登录账号信息。
修复步骤
  1. 将ActivityResultLauncher声明为Activity的成员变量,在onCreate初始化阶段完成注册,不要放在点击事件里注册
  2. 点击按钮时仅调用launch方法发起登录Intent
  3. 结果回调里使用回调参数返回的Intent解析Google登录结果
修复后完整代码
// 类成员位置声明启动器
private lateinit var googleSignInLauncher: ActivityResultLauncher<Intent>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    FirebaseApp.initializeApp(this)

    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken("替换为你自己的Web客户端ID")
        .requestEmail()
        .build()

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
    firebaseAuth = FirebaseAuth.getInstance()

    // onCreate阶段注册,符合生命周期要求
    googleSignInLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
        if (result.resultCode == Activity.RESULT_OK) {
            // 注意:用result.data获取系统返回的Intent,不要用自己构造的signInIntent
            val task: Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(result.data)
            handleResult(task)
        }
    }

    Signin.setOnClickListener {
        Toast.makeText(this, "Logging In", Toast.LENGTH_SHORT).show()
        val signInIntent = mGoogleSignInClient.signInIntent
        // 点击时仅发起启动,不做注册操作
        googleSignInLauncher.launch(signInIntent)
    }
}
注意事项
  • 所有registerForActivityResult注册操作都要在onCreate/类初始化阶段完成,禁止放在onStart、onResume、点击事件等生命周期进入STARTED之后的时机调用
  • 不需要再重写已废弃的onActivityResult方法,所有结果处理逻辑直接写在注册时传入的回调中即可
  • 解析登录结果必须使用回调返回的result.data,复用发起请求的Intent会导致解析失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:39:57