编辑2
也许为Android创建“ ID客户端OAuth 2.0”可以解决此问题。 此ID必须在此页面上创建 https://console.developers.google.com/apis/credentials
调查正在进行中。
编辑
有关如何批准我的应用使用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)
问题:
因此,对于我在手机上测试过的大约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
答案 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方法确实使用了它。