Как заставить AccountManager отображать экран "Запрос доступа" после того, как пользователь уже разрешил доступ?
При использовании AccountManager:: getAuthTokenByFeatures открывается экран запроса доступа, позволяющий пользователю разрешить или запретить доступ к учетной записи. После того, как пользователь разрешает доступ, последующие вызовы (с теми же аргументами) возвращают токен auth без запроса пользователя.
Как очистить состояние, чтобы убедиться, что появится запрос на запрос доступа? (Это было бы полезно, по крайней мере, для целей разработки, тестирования и демонстрации.)
Ответы
Ответ 1
Единственное решение, которое я нашел, - это вручную очистить данные, хранящиеся в системной учетной записи. 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'
Ответ 2
Я создал новую учетную запись, которую я использую для тестирования.
Новая учетная запись всегда запрашивает запрос доступа.
Не забудьте НЕ разрешить доступ.
Чтобы проверить экран входа в систему, измените пароль для учетной записи с другого устройства/ПК.
Ответ 3
Использование сервисов Google Play:
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, "[email protected]", scope);
ИЛИ "грубая сила"
Intent res = new Intent();
res.addCategory("account:[email protected]");
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","[email protected]");
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, приложение показывает вам окно для разрешения снова на устройстве.
Ответ 4
В моем случае, что говорит Бенн Сандовал, не работает.
Мне пришлось отменить разрешения программным образом, а затем снова подключиться.
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 +