首页 > 解决方案 > 罕见异常“android.accounts.AuthenticatorException: ServiceDisabled”——这是什么意思?

问题描述

编辑 3(七月)

现在问题又回来了!

android.accounts.AuthenticatorException: ServiceDisabled

所以我的电子邮件应用程序无法再连接到 GMail。

有人可以帮忙吗?

谢谢

编辑 2(3 月 7 日)

也许为 Android 创建一个“ID 客户端 OAuth 2.0”正在解决这个问题。这个 ID 必须在这个页面上创建 https://console.developers.google.com/apis/credentials

调查正在进行中。。


编辑

我认为这与此有关https://wordpress.org/support/topic/be-careful-everybody-who-is-using-oauth-2-0-to-access-gmail-google-gsuite-apis/

我应该如何让我的应用程序获准使用oauth2:https://mail.google.com/ 范围


受影响用户的反馈 - 这是造成这种情况的原因吗?

他创建了许多 Google 帐户(做一些测试)。这是否与创建的 Google 帐户数量过多有关,这些帐户“链接”到他的初始电子邮件地址(使用相同的初始帐户进行恢复)? 错误的假设


我的电子邮件应用程序正在使用 AccountManager 访问 GMail(使用 OAuthToken )并且工作正常(自 2102 年以来),除了我现在有一个特殊的例外情况,该例外情况仅发生在特定的 Google 帐户中

这似乎是一个相当新的行为

这是错误是:

W/System.err: android.accounts.AuthenticatorException: ServiceDisabled
W/System.err:     at android.accounts.AccountManager.convertErrorToException(AccountManager.java:2507)
W/System.err:     at android.accounts.AccountManager.-wrap0(Unknown Source:0)
W/System.err:     at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:2350)
W/System.err:     at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)
W/System.err:     at android.os.Binder.execTransact(Binder.java:697)

问题:

  1. “android.accounts.AuthenticatorException: ServiceDisabled ”错误究竟是什么意思?
  2. 为什么这仅发生在这个谷歌帐户上?(可能还有其他一些,但根据用户的反馈,这似乎真的很少见)。我应该检查此帐户的一些 Android Google 帐户设置吗?哪个?

因此,相同的代码适用于我在手机上测试的大约 10 个帐户,但对于这个非常具体的 Google 帐户却失败了!为什么?

仅供参考,我在这里打开了一个问题:https ://issuetracker.google.com/issues/127454208

笔记:

据该账号的所有者称,该应用程序之前正在运行,然后突然停止运行:我正在调查它何时发生,以及他是否能给我一些关于他当时可能采取的行动的提示。

预先感谢您的帮助。


我收集的一些信息:

我设法调试了一下,发现堆栈跟踪在 cpp 中走得更远:

jboolean res = env->CallBooleanMethod(mObject, gBinderOffsets.mExecTransact,
        code, (int32_t)&data, (int32_t)reply, flags);

https://android.googlesource.com/platform/frameworks/base/+/f76a50c/core/jni/android_util_Binder.cpp

我发现“res = onTransact(code, data, reply, flags);” (即来自 AIDL 的 android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69) )被调用

code = 2 (probably android.accounts.AccountManager.VISIBILITY_USER_MANAGED_VISIBLE = 2)
data : a Parcel Object 
reply : another Parcel Object 
flags = 17

这看起来不错,适用于所有其他 Google 帐户!

我还发现AccountManager.convertErrorToException中的错误代码 是代码ERROR_CODE_INVALID_RESPONSE

标签: androidgoogle-authenticationaccountmanager

解决方案


问题理解并解决!

自 2019 年 1 月起,部分 OAuth2 范围受到限制
此外,特定 API 范围的附加要求页面指出:

本节中的要求将于 2019 年 1 月 15 日开始执行,届时所有新应用程序都必须经过新的应用程序审查流程才能访问某些 API 范围。在 2019 年 1 月 15 日之前提交验证的申请将获得符合要求的宽限期,并且必须在 2019 年 2 月 15 日之前提交重新审核。要了解有关这些新要求的更多信息,请阅读我们的博客文章,提升用户相信我们的 API 生态系统和 OAuth 应用程序验证常见问题解答。

为了让您的 Android 应用程序与此兼容,您必须为 Android 创建一个新的“ID 客户端 OAuth 2.0”。

此 ID 必须在此页面上创建https://console.developers.google.com/apis/credentials

奇怪的是,这一切似乎都与 G Suite 和 Google API 有关,而不是 Android SDK。
这可能是因为 Android SDK 的 OAuth 部分在后台使用了 Google API,更准确地说,AccountManager#getAuthToken方法确实使用了它。


推荐阅读