Как отозвать разрешение, которое мое приложение получает от пользователя Google Gmail AccountManager.getAuthToken(

Создал тестовое приложение, используя Eclipse, чтобы получить authToken из одной из моих учетных записей электронной почты Google на моем устройстве.

Выполнение этого побудило меня открыть диалоговое окно разрешения доступа, где я нажимаю разрешить доступ:

accountManager.getAuthToken(account,"oauth2:https://www.googleapis.com/auth/userinfo.profile", false, new GetAuthTokenCallback(), null);

Я хотел создать диалоговое окно выбора, которое работает с API8 и выше, где пользователь может выбрать, к какой учетной записи Google он разрешит мне доступ. Для этого я должен отозвать разрешение снова видеть экран.

должен ли я видеть свое тестовое приложение на этой странице или нет?
Авторизованный Доступ к вашему аккаунту Google

Я ищу способ отозвать разрешение, и это не работает..
Единственное, что работает, - это создать новый проект приложения.

ОБНОВЛЕНИЕ 2013
Использование службы Google Play GCM, и это работает нормально


person Erik    schedule 04.11.2012    source источник


Ответы (3)


Что касается страницы "Авторизованный доступ к вашему аккаунту Google", вы должны не видеть ваше приложение там, так как это разрешение является локальным разрешением устройства, хранящимся в базе данных на телефоне.

Не похоже, что это разрешение можно отозвать простым способом. Мне удалось найти несколько способов снова вызвать диалог, но ни один из них не идеален. В некоторых из этих решений показано не то же самое диалоговое окно, но оно может быть достаточно близким для целей тестирования в зависимости от того, что вы хотите сделать:

Внутри getAuthToken отслеживает, был ли предоставлен доступ или нет с использованием UID приложения. Поэтому, если вы можете каким-то образом заставить Android предоставить вашему приложению новый UID или заставить его очистить базу данных предоставленных грантов, диалоговое окно должно отображаться снова. Вот некоторые решения, которые, по словам других, работают для них, но не работают для меня (может быть, это зависит от того, какой телефон вы используете?):

В качестве примечания: отозвать разрешения на доступ к токенам аутентификации Google упомяните, что есть внутренние методы Android для отзыва доступа, но они недоступны через общедоступный API.

person nibarius    schedule 28.11.2012

Есть два случая, которые вы должны рассмотреть:

  1. Авторизация на стороне сервера
  2. Android Account Manager (на стороне устройства) Авторизация

Вариант 1. Аннулирование учетных записей Google на стороне сервера можно выполнить по адресу: https://accounts.google.com/IssuedAuthSubTokens

Вам просто нужно войти в систему с соответствующей учетной записью Google и выбрать отзыв приложения / веб-сайта.

Случай 2: Если на вашем устройстве Android отображается экран, на котором говорится что-то вроде: «Приложение хочет получить доступ к вашей учетной записи Google… Разрешить/Запретить?», то это авторизация типа менеджера учетной записи, где вам необходимо изменить sqlite3 базу данных на вашем телефоне, чтобы отозвать приложение (не так тривиально, как в случае 1, и для этого требуется root-доступ к вашему телефону):

я. Сначала скопируйте базу данных и файл журнала (accounts.db и account.db-journal) в другое место (например, на SD-карту или на компьютер). Файлы базы данных можно найти в этом каталоге на вашем устройстве Android:

/data/system/users/0/accounts.db
/data/system/users/0/accounts.db-journal

II. Теперь вам нужен редактор sqlite3. Я использовал отладчик Sqlite из магазина Google Play. В качестве альтернативы вы можете использовать двоичные файлы sqlite3 из http://www.sqlite.org/download.html. и сделать это на компьютере.

III. Вы знаете, что вам нужно использовать редактор для удаления определенных записей в таблице «extras» базы данных account.db. Возможно, вы захотите пройти краткое руководство по командам sqlite, но вот несколько примеров, и «Sqlite Debugger» упрощает изучение:

Сначала откройте файл account.db в редакторе.

Чтобы перечислить все строки в таблице «дополнительно», вы можете использовать следующую команду:

SELECT * from extras

Лучшей идеей было бы перечислить в таблице «дополнительно» только те строки, которые соответствуют заявке, которую вы хотите отозвать. Например, если «com.someapp» — это имя вашего приложения, вы можете использовать следующую команду:

SELECT * from extras WHERE key like '%com.someapp%'

Вы должны получить примерно такой вывод:

id|accountsid|key|value
10|1|perm.xxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|1
11|1|EXP:xxxxxxxxxxxxxxxxxxxxxxxxxxxx.oauth2:https://google.com/|xxxxxxx

Запишите номера идентификаторов, которые вы хотите удалить из приведенного выше вывода (т. е. строки, соответствующие приложению, которое вы хотите отозвать), а затем используйте следующие команды для удаления этих строк:

DELETE from extras where _id = 10
DELETE from extras where _id = 11

Скопируйте базу данных и файл журнала в исходное расположение. Убедитесь, что вы установили разрешения и права собственности на исходные. чтение/запись только для владельца и группы, а владельцы владельца и группы являются «системными». Для этой операции потребуется root-доступ!

Перезагрузите устройство, и вы должны были отозвать разрешение для приложения. Вы можете проверить это, попросив приложение снова запросить авторизацию. Если вы видите экран с просьбой авторизовать приложение («Приложение хочет получить доступ к вашей учетной записи Google… Разрешить/запретить?»), то вы успешно отозвали приложение.

Ссылки:

  1. https://groups.google.com/forum/#!topic/android-developers/3lQb83jeyE8
  2. https://github.com/jberkel/sms-backup-plus/issues/369
person moo    schedule 28.01.2014

Решением было удаление и перезапуск устройства.
Мне пришлось подождать некоторое время перед перезапуском.

Обновление .. Должен сказать, что это работает только иногда.

person Erik    schedule 28.11.2012