我一直致力于将 Google OAuth 集成到我的 Android 应用程序中,如
所述https://developer.android.com/training/sign-in/credential-manager#siwg-button
但是,当我调用 credentialManager.getCredential 时,我遇到了一条错误消息“NoCredentialException:没有可用的凭据”。我在 Google Cloud 中创建了一个项目,并在 OAuth 设置中添加了 WebClient 和 Android Client。在我的代码中,我输入了 WebClient 的 ID。这个令人沮丧的错误的解决方案是什么?
这是我的代码
private fun googleLogin(context: Context) {
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setAutoSelectEnabled(true)
.setServerClientId("!!!!Web Server Client ID!!!!!")
.build()
val request: GetCredentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
val credentialManager = CredentialManager.create(context)
viewModelScope.launch {
val loginFlow = flow {
val result = credentialManager.getCredential(
context = context,
request = request
)
**// Boom! NoCredentialException: No credentials available**
emit(result.credential)
}.catch { e ->
if(e is NoCredentialException) {
Log.e("TAG", "loginSuccess NoCredentialException", e)
}
}.collect {
loginSuccess(it)
}
}
}
private fun loginSuccess(credential: Credential) {
when(credential) {
is PasswordCredential -> {
val password = credential.password
val id = credential.id
Log.e("TAG", "loginSuccess id: $id password: $password")
}
is GoogleIdTokenCredential -> {
val idToken = credential.idToken
Log.e("TAG", "loginSuccess idToken: $idToken")
}
is PublicKeyCredential -> {
Log.e("TAG", "loginSuccess PublicKeyCredential")
}
is CustomCredential -> {
if(credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
try {
val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)
Log.e("TAG", "loginSuccess idToken: ${googleIdTokenCredential.idToken} ${googleIdTokenCredential.displayName}")
} catch (e: GoogleIdTokenParsingException) {
e.printStackTrace()
}
}
else {
Log.e("TAG", "Unexcepted CustomCredential type: ${credential.type}")
}
}
}
}
我想要在 Android 本机应用程序中使用 Google OAuth 登录
我也有同样的错误。 你修好了吗