Редкое исключение «android.accounts.AuthenticatorException: ServiceDisabled» - что это значит? - PullRequest
0 голосов
/ 05 марта 2019

РЕДАКТИРОВАТЬ 2

Возможно, эта проблема решается созданием «ID клиентов OAuth 2.0» для Android. Этот идентификатор должен быть создан на этой странице https://console.developers.google.com/apis/credentials

Расследование продолжается ..


EDIT

Я думаю, что это связано с этим 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. С какой стати это происходит только с этим аккаунтом Google? (и, возможно, для некоторых других, но, по отзывам пользователей, это кажется очень редким). Должен ли я проверить некоторые настройки учетной записи Google Android для этой учетной записи ..? Какие из них?

Итак, один и тот же код подходит для примерно 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 (код, данные, ответ, флаги);" (то есть android.accounts.IAccountManagerResponse $ Stub.onTransact (IAccountManagerResponse.java:69) из AIDL) вызывается с

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 голосов
/ 12 марта 2019

Проблема понята и решена!

С января 2019 года некоторые области действия OAuth2 ограничены .Кроме того, Дополнительные требования для определенных областей API страницы:

Выполнение требований в этом разделе начнется 15 января 2019 года, когда все новые приложения должны пройти новое приложениепросмотрите процесс перед доступом к определенным областям API.Заявкам, поданным на проверку до 15 января 2019 г., будет предоставлен льготный период для приведения в соответствие, и они должны быть представлены на повторную проверку не позднее 15 февраля 2019 г.доверие к нашей экосистеме API и ответы на часто задаваемые вопросы по проверке приложений OAuth.

Для того чтобы ваши приложения Android были совместимы с этим, вы должны создать новый «ID клиентов OAuth 2.0» для Android.

Этот идентификатор необходимо создать на этой странице https://console.developers.google.com/apis/credentials

Странно то, что все это связано с G Suite и API Google, а не с Android SDK.Вероятно, это связано с тем, что OAuth-часть Android SDK использует Google API за кулисами, точнее, метод AccountManager # getAuthToken его использует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...