使用凭证管理器 API 的 OAuth2.0 Android 应用程序中的 OAuth 同意屏幕

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

我正在尝试通过 OAuth2.0 在我的 Android 应用程序中请求 Gmail

readonly
同意。 使用旧的 Google SignIn API 有许多可用的解决方案,但它将被弃用,而 Credential Manager API https://developer.android.com/training/sign-in/credential-manager 现在是首选方法。

我已成功创建

Android
凭据并拥有客户端 ID, 我还可以使用以下代码启动系统生成的底页

        val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
            .setFilterByAuthorizedAccounts(filterByAuthorizedAccounts)
            .setServerClientId(CLIENT_ID)
            //.setNonce("<nonce string to use when generating a Google ID token>")
            .build()

        val credentialManager = CredentialManager.create(this)
        val request =
            GetCredentialRequest.Builder().addCredentialOption(googleIdOption).build()
        lifecycleScope.launch {
            try {
                withContext(Dispatchers.IO) {
                    val result = credentialManager.getCredential(this@HomeActivity, request)
                    handleSignIn(result)
                }
            } catch (e: NoCredentialException) {
                Timber.e(e)
            } catch (e: GetCredentialException) {
                Timber.e(e)
            }
        }

但是一旦我选择一个帐户(也在云项目下添加为测试用户)并继续,就会抛出错误,而不是通常在身份验证后出现的同意屏幕。

androidx.credentials.exceptions.GetCredentialCustomException: Developer console is not set up correctly.
at androidx.credentials.CredentialProviderFrameworkImpl.convertToJetpackGetException$credentials_release(CredentialProviderFrameworkImpl.kt:291)
at androidx.credentials.CredentialProviderFrameworkImpl$onGetCredential$outcome$2.onError(CredentialProviderFrameworkImpl.kt:152)
at androidx.credentials.CredentialProviderFrameworkImpl$onGetCredential$outcome$2.onError(CredentialProviderFrameworkImpl.kt:143)
at android.credentials.CredentialManager$GetCredentialTransport.lambda$onError$2(CredentialManager.java:694)
at android.credentials.CredentialManager$GetCredentialTransport.$r8$lambda$nlbYav9mLBoE6Yh1vFKCvITF3ks(Unknown Source:0)
at android.credentials.CredentialManager$GetCredentialTransport$$ExternalSyntheticLambda2.run(Unknown Source:6)
at androidx.credentials.CredentialManager$$ExternalSyntheticLambda0.execute(D8$$SyntheticClass:0)
at android.credentials.CredentialManager$GetCredentialTransport.onError(CredentialManager.java:693)
at android.credentials.IGetCredentialCallback$Stub.onTransact(IGetCredentialCallback.java:123)
at android.os.Binder.execTransactInternal(Binder.java:1363)
at android.os.Binder.execTransact(Binder.java:1304)

是的,我已经多次检查过

package-name
SHA-1
指纹,还为
..gmail.readonly
范围配置了同意屏幕。[未提交验证,因为正在测试中]。并且没有提到在投入生产之前需要验证才能工作。

我尝试的另一件事是将

Android Client Id
替换为
Web application Client Id
。不过,它确实允许我登录,但之后没有同意屏幕。

到目前为止,我认为在新的凭据管理器 API 中,启动同意屏幕是由 API 本身处理的,而且我无法在相应的包中找到相关的代码或方法。

这里缺少什么?

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

CredentialManager 不支持使用任何类型的 OAuth 授权(与身份验证相比)。对于授权,您需要直接使用Authorization APIS;这些 API 是 play-service 的身份验证库的一部分。如果您在使用这些 API 时遇到任何问题,请随时发布问题。

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