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
相关产品推荐
相关产品推荐


