Kotlin中startActivityForResult废弃后Firebase谷歌登录点击无响应如何解决
Google Sign In 点击无响应排查修复方案
以下是按优先级排列的排查与修复方案:
- 确认
GoogleSignInClient初始化配置正确
绝大多数无响应问题由初始化配置错误导致,你需要确保在调用signIn方法前已完成正确初始化,示例代码如下:// 初始化要放在onCreate中,在signIn调用前执行 val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) // 此处必须传入Firebase控制台中「项目设置」->「通用」->「Web API密钥」对应的Web客户端ID,不能填Android客户端ID .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() val googleSignInClient = GoogleSignIn.getClient(this, gso) - 确认Google Cloud & Firebase配置正确
- 已将正确的
google-services.json放到app模块根目录 - Firebase控制台已添加当前应用打包的SHA1、SHA256签名信息(debug和release签名都要单独添加)
- Google Cloud控制台的OAuth同意屏幕已完成配置:如果是测试状态,必须将测试用的谷歌账号添加到「测试用户」列表;如果需要公开使用需要将应用发布为正式状态
- 已将正确的
- 补充异常捕获与日志定位问题
在回调中补充异常处理逻辑,即可拿到具体报错原因:private val signInActivityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result -> if (result.resultCode == Activity.RESULT_OK){ val task = GoogleSignIn.getSignedInAccountFromIntent(result.data) try { val account = task.getResult(ApiException::class.java) // 后续将account的idToken传入Firebase进行身份验证即可 Toast.makeText(this@SignInActivity, "登录成功", Toast.LENGTH_SHORT).show() } catch (e: ApiException) { // 此处打印异常即可看到具体报错原因,比如密钥错误、用户不在测试列表等 Log.e("GoogleSignIn", "登录失败: ${e.statusCode} ${e.message}") Toast.makeText(this@SignInActivity, "登录失败:${e.message}", Toast.LENGTH_SHORT).show() } } else { Log.e("GoogleSignIn", "结果异常,resultCode:${result.resultCode}") } } - 确认Result API注册位置正确
registerForActivityResult必须声明为Activity的成员变量,禁止在onCreate之后的生命周期或者点击事件中动态注册,你当前的写法符合要求,不需要修改。
内容的提问来源于stack exchange,提问作者Zeynep
相关产品推荐
相关产品推荐

