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

Android Native应用Google账号登录失败:错误码16(GetCredentialException.TYPE_USER_CANCELED)排查求助

Android Native应用Google账号登录失败:错误码16(GetCredentialException.TYPE_USER_CANCELED)排查求助

各位好,我最近在给我的Android应用集成Google账号登录功能,用的是Credential API,但一直遇到个头疼的问题——明明用户根本没取消登录操作,却总是抛出错误码16的GetCredentialException.TYPE_USER_CANCELED异常,实在找不到原因,来向大家求助!

先给大家说下我的开发环境:

  • IDE: Android Studio
  • 语言与框架: Kotlin, Jetpack Compose
  • Java版本: 11
  • Gradle SDK配置:
    • minSdk = 24
    • targetSdk = 35
    • versionCode = 1
    • versionName = "1.0"
    • compileSdk = 35
  • 测试模拟器: Pixel 7 Pro

下面是我实现的核心代码片段:

private val coroutineScope = CoroutineScope(Dispatchers.Main)

private val googleIdOption: GetSignInWithGoogleOption by lazy {
    GetSignInWithGoogleOption.Builder(serverClientId = context.getString(R.string.google_login_web_client_id))
        .setNonce(generateNonce())
        .build()
}

private val credentialManager by lazy {
    CredentialManager.create(context)
}

// 触发登录的方法
private fun launchGoogleLogin() {
    coroutineScope.launch {
        try {
            val result = credentialManager.getCredential(
                context = context,
                request = GetCredentialRequest.Builder()
                    .addCredentialOption(googleIdOption)
                    .build()
            )
            // 处理登录成功逻辑
            handleLoginSuccess(result)
        } catch (e: GetCredentialException) {
            when (e.type) {
                GetCredentialException.TYPE_USER_CANCELED -> {
                    // 这里总是被触发,错误码16,但用户并没有取消操作
                    Log.e("GoogleLogin", "用户取消登录?但实际没有!错误码:${e.errorCode}")
                }
                else -> {
                    Log.e("GoogleLogin", "登录失败:${e.message}")
                }
            }
        }
    }
}

// 生成Nonce的方法
private fun generateNonce(): String {
    val bytes = ByteArray(16)
    SecureRandom.getInstanceStrong().nextBytes(bytes)
    return Base64.encodeToString(bytes, Base64.URL_SAFE or Base64.NO_WRAP or Base64.NO_PADDING)
}

我已经检查过以下几点,但问题依然存在:

  1. Google Cloud Console里已经正确配置了OAuth 2.0客户端ID,Web客户端ID也填对了,并且添加了应用的SHA-1指纹
  2. 模拟器已经登录了Google账号,并且账号有对应的测试权限
  3. 权限方面,已经在Manifest里添加了INTERNET权限

有没有朋友遇到过类似的问题?或者能帮我分析下可能的排查方向?非常感谢!

备注:内容来源于stack exchange,提问作者slaimzZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:03:05