当我检查我的项目时,我在 Android Studio 中看到一条警告消息。
在“Android Lint:正确性”中,警告是:
滥用 Google API 登录,
使用 :googleid 类而不使用 GoogleIdTokenCredential。
警告详细说明:
滥用使用 Google API 登录
使用和:googleid
等GetGoogleIdOption
类时,您通常必须使用GetSignInWithGoogleOption
.GoogleIdTokenCredential
或TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
处理响应。GoogleIdTokenCredential
。TYPE_GOOGLE_ID_TOKEN_SIWG_CREDENTIAL
如果没有引用。问题 id:CredentialManagerSignInWithGoogle:googleid
https://developer.android.com/identity/sign-in/,此检查会报告这些GoogleIdTokenCredential
类的所有使用情况凭证管理器-siwg#create-sign
我检查了上面给出的链接,并按照该链接中的文档进行操作。 我在谷歌搜索引擎和堆栈溢出上对此进行了很多搜索。 我也向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")
}
在片段中
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()
}
要抑制警告,您可以使用@SuppressLint。 😁
注意:这是一个 Android 注释,可帮助您忽略某些 lint 警告。当你知道一段特定的代码是 引起警告,但对您的项目来说不是问题,您可以使用 这个注释。
@SuppressLint("deprecation")
fun main() {
oldApiCall()
}
根据您的警告,如果您想忽略它,请使用
@SuppressLint
注释并提供问题 ID,例如 deprecation
、UnusedResources
、NewApi
、ResourceType
等。