#android #google-authentication #accountmanager
#Android #google-аутентификация #accountmanager
Вопрос:
ПРАВКА 3 (июль)
Проблема снова вернулась!
android.accounts.AuthenticatorException: ServiceDisabled
Итак, мое почтовое приложение больше не может подключаться к GMail.
Кто-нибудь может помочь?
Спасибо
ПРАВКА 2 (7 марта)
Возможно, создание «ID clients OAuth 2.0» для Android решает эту проблему.. Этот идентификатор должен быть создан на этой странице 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)
Вопросы:
- Что именно делает «android.accounts.Исключение AuthenticatorException: ServiceDisabled» означает ошибку?
- С какой стати это происходит только с этой учетной записью Google? (и, вероятно, для некоторых других, но это кажется действительно редким, согласно отзывам пользователей). Должен ли я проверить некоторые настройки учетной записи Android Google для этих учетных записей ..? Какие из них?
Итак, тот же код подходит примерно для 10 учетных записей, которые я тестировал на своем телефоне, и он не работает с этой очень специфической учетной записью Google! Почему?
К вашему сведению, я открыл проблему здесь:https://issuetracker.google.com/issues/127454208
Примечание:
По словам владельца этой учетной записи, приложение работало раньше и внезапно перестало работать: я нахожусь в процессе расследования, когда это произойдет, и может ли он дать мне несколько подсказок о некоторых возможных действиях, которые он предпринял в то время.
Заранее спасибо за вашу помощь.
Некоторая информация, которую я собрал:
Мне удалось немного отладить это и обнаружил, что трассировка стека продолжается в cpp:
jboolean res = env->CallBooleanMethod(mObject, gBinderOffsets.mExecTransact,
code, (int32_t)amp;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.converterrorto был код ERROR_CODE_INVALID_RESPONSE
Ответ №1:
Проблема понята и решена!
С января 2019 года некоторые области OAuth2 ограничены.
Кроме того, дополнительные требования для определенных областей API удовлетворяют странице:
Принудительное выполнение требований в этом разделе начнется 15 января 2019 года, когда все новые приложения должны пройти новый процесс проверки приложений перед доступом к определенным областям API. Заявкам, отправленным на проверку до 15 января 2019 года, будет предоставлен льготный период для приведения в соответствие, и они должны быть отправлены на повторное рассмотрение не позднее 15 февраля 2019 года. Чтобы узнать больше об этих новых требованиях, прочитайте наш пост в блоге «Повышение доверия пользователей к нашей экосистеме API» и часто задаваемые вопросы о проверке приложений OAuth.
Чтобы ваши приложения для Android были совместимы с этим, вы должны создать новый «ID clients OAuth 2.0» для Android.
Этот идентификатор должен быть создан на этой странице https://console.developers.google.com/apis/credentials
Странно то, что все это, похоже, связано с G Suite и Google API, а не с Android SDK.
Вероятно, это потому, что часть OAuth Android SDK использует API Google за кулисами, точнее, метод AccountManager#getAuthToken использует его.
Комментарии:
1. Привет, oauth клиента id для Android был создан автоматически, но он не сработал, я удалил его, создал новый, но все же.. Вы думаете, это может быть вопросом времени? Как будто ему нужно некоторое время, чтобы быть активным? Если нет, есть ли у вас идея? я получаю то же самое «android.accounts. Исключение AuthenticatorException: ServiceDisabled » Спасибо
2. Привет, я думаю, это зависит от области OAuth, которую вы используете. Я предлагаю вам внимательно прочитать эту страницу support.google.com/cloud/answer/9110914#restricted-scopes 😉