Как заставить AccountManager отображать экран «Запрос доступа» после того, как пользователь уже разрешил доступ? - PullRequest
15 голосов
/ 28 июля 2011

При использовании AccountManager :: getAuthTokenByFeatures отображается экран запроса доступа для пользователя, чтобы разрешить или запретить доступ к учетной записи.После того как пользователь разрешает доступ, последующие вызовы (с теми же аргументами) возвращают токен авторизации без запроса пользователя.

Как очистить состояние, чтобы убедиться, что появляется запрос на доступ?(Это было бы полезно по крайней мере для целей разработки, тестирования и демонстрации.)

Ответы [ 4 ]

7 голосов
/ 28 июля 2011

Единственное решение, которое я нашел, - это вручную очистить данные, хранящиеся в системном account.db.Запустите следующую команду из командной строки, чтобы очистить все разрешения учетной записи в системе.

Для эмулятора:

adb -e shell 'sqlite3 /data/system/accounts.db "delete from grants;"'

Для устройства (должен быть рутирован и иметь установленный двоичный файл sqlite3):

adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su'
1 голос
/ 15 августа 2013

Использование Google Play Services:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

Добавьте https://www.googleapis.com/auth/userinfo.profile в свою область.

Пример:

String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"

final String token = GoogleAuthUtil.getToken(context, "xxxx@gmail.com", scope);

ИЛИ "грубая сила"

Intent res = new Intent();
res.addCategory("account:xxxx@gmail.com");
res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile");
Bundle extra= new Bundle();
extra.putString("androidPackageName","com.your.package");
res.putExtra("callerExtras",extra);
res.putExtra("androidPackageName","com.your.package");
res.putExtra("authAccount","xxxx@gmail.com");

String mPackage = "com.google.android.gms";
String mClass = "com.google.android.gms.auth.TokenActivity";
res.setComponent(new ComponentName(mPackage,mClass));
startActivityForResult(res,100);

Теперь, когда вы отмените доступ здесь https://accounts.google.com/IssuedAuthSubTokens, приложение покажет вам окно для разрешения снова в устройстве.

1 голос
/ 17 мая 2012

Я создал новую учетную запись, которую я использую для тестирования.Новая учетная запись всегда будет запрашивать доступ.Не забудьте НЕ разрешать доступ.

Чтобы проверить экран входа в систему, измените пароль учетной записи с другого устройства / ПК.

0 голосов
/ 16 июля 2015

В моем случае то, что говорит Бенн Сандовал, не работает.

Мне пришлось программно отозвать разрешения, а затем снова подключиться.

if (googleApiClient != null && !googleApiClient.isConnecting() && googleApiClient.isConnected()){

    googleApiClient.clearDefaultAccountAndReconnect();
    Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(Status status) {
            Log.i("google+", "Google+ user access revoked");
            googleApiClient.connect();
        }
    });
}

При этом меня снова просили предоставить разрешения для Google +

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