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

Android Lint提示‘Google登录API误用’问题求助

Android Lint警告:Misuse of Sign in with Google API(按文档实现仍触发)

警告内容

Misuse of Sign in with Google API
Use of :googleid classes without use of GoogleIdTokenCredential.
警告信息截图

警告详细说明:

Misuse of Sign in with Google API
当使用:googleid类(如GetGoogleIdOption和GetSignInWithGoogleOption)时,通常必须使用GoogleIdTokenCredential、TYPE_GOOGLE_ID_TOKEN_CREDENTIAL或GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_SIWG_CREDENTIAL处理响应。

如果未引用GoogleIdTokenCredential,此检查会报告所有这些:googleid类的使用情况。

问题ID:CredentialManagerSignInWithGoogle

问题背景

我已遵循官方文档完成代码实现,也在谷歌、Stack Overflow上搜索过相关问题,咨询过AI,还尝试重启Android Studio,但每次代码检查依然触发该警告。

依赖配置(build.gradle)

dependencies {
     // dependencies for credential
    implementation("androidx.credentials:credentials-play-services-auth:1.2.2")
    implementation("com.google.android.libraries.identity.googleid:1.1.1")
}

Fragment核心代码

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val googleIdOption by lazy {
            GetGoogleIdOption.Builder().setFilterByAuthorizedAccounts(false)
                .setServerClientId(serverClientId)
                .setAutoSelectEnabled(true).setNonce(generateNonce()).build()
        }

        val request: androidx.credentials.GetCredentialRequest =
            androidx.credentials.GetCredentialRequest.Builder().addCredentialOption(googleIdOption)
                .build()

        val mContext = requireContext()
        val credentialManager by lazy { androidx.credentials.CredentialManager.create(mContext) }

        lifecycleScope.launch {
            try {
                val result = credentialManager.getCredential(
                    request = request,
                    context = mContext,
                )
                handleSignIn(result)
            } catch (e: androidx.credentials.exceptions.GetCredentialException) {
                showMessage("Failed to get credential: $e")
            }
        }
    }

    private fun handleSignIn(result: androidx.credentials.GetCredentialResponse) {
        when (val credential = result.credential) {
            is CustomCredential -> {
                if (credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
                    try {
                        val googleIdTokenCredential =
                            GoogleIdTokenCredential.createFrom(credential.data)

                        val id = googleIdTokenCredential.id
                        val displayName = googleIdTokenCredential.displayName

                        if (displayName == null) {
                            showMessage("Login Failed\nid: $id")
                            return
                        }

                    } catch (e: GoogleIdTokenParsingException) {
                        showMessage("Received an invalid google id token response, $e")
                    }
                }
            }

            else -> {
                showMessage("Unexpected type of credential")
            }
        }
    }

    private fun generateNonce(): String {
        val nonceBytes = ByteArray(16)
        SecureRandom().nextBytes(nonceBytes)
        return Base64.encodeToString(
            nonceBytes, Base64.NO_PADDING or Base64.NO_WRAP or Base64.URL_SAFE
        )
    }

    private fun showMessage(message: String) {
        Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show()
    }

内容的提问来源于stack exchange,提问作者AR Sharif Uddin JUMMAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:25:22