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 = 24targetSdk = 35versionCode = 1versionName = "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) }
我已经检查过以下几点,但问题依然存在:
- Google Cloud Console里已经正确配置了OAuth 2.0客户端ID,Web客户端ID也填对了,并且添加了应用的SHA-1指纹
- 模拟器已经登录了Google账号,并且账号有对应的测试权限
- 权限方面,已经在Manifest里添加了
INTERNET权限
有没有朋友遇到过类似的问题?或者能帮我分析下可能的排查方向?非常感谢!
备注:内容来源于stack exchange,提问作者slaimzZ
相关产品推荐
相关产品推荐

