罕见的异常“ android.accounts.AuthenticatorException:ServiceDisabled”-这是什么意思?

时间:2019-03-05 17:20:09

标签: android google-authentication accountmanager

编辑2

也许为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/ scope


反馈受影响的用户-这是原因吗?

他创建了许多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

注意:

根据此帐户的所有者的说法,该应用之前曾在运行,并且突然停止运行:我正在调查该应用的发生时间,以及他是否可以给我一些有关他当时采取的可能措施的提示。

在此先感谢您的帮助。


我收集的一些信息:

我设法调试了一下,发现stacktrace在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(代码,数据,回复,标志);” (即来自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

1 个答案:

答案 0 :(得分:0)

问题理解并解决!

自2019年1月起,some OAuth2 scopes are restricted
另外,Additional Requirements for Specific API Scopes页的状态为:

  

本节中的要求将从1月开始执行   2019年15月15日,所有新申请都必须接受新申请   在访问某些API范围之前,请先审核流程。应用领域   在2019年1月15日之前提交进行验证的用户将获得   要达到宽限期,并且必须提交重新审核   迟于2019年2月15日。了解有关这些新功能的更多信息   要求,请阅读我们的博客文章“提高用户对我们API的信任度”   生态系统以及OAuth应用程序验证常见问题解答。

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

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

上创建此ID。

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

相关问题