Android Google Oauth NoCredentialException:没有可用的凭据

问题描述 投票:0回答:1

我一直致力于将 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 登录

android oauth google-oauth
1个回答
0
投票

我也有同样的错误。 你修好了吗

© www.soinside.com 2019 - 2024. All rights reserved.