android permission get accounts

Иногда разработчик хочет отслеживать пользователя. Первый вариант, который приходит в голову — попросить его ввести какие-то данные о себе и сохранить их где-нибудь. Но просить пользователя повторять эту процедуру при покупке нового устройства не самая лучшая идея. Кроме того, вы не можете гарантировать уникальность данных. Второй вариант — запомнить идентификатор телефона. Но пользователи иногда пользуются двумя телефонами, планшетами и т.д. и тут одним идентификатором не обойдёшься. Опять проблема.

Третий вариант – использовать класс AccountManager. С разрешения пользователя, вы можете использовать AccountManager для извлечения имён учетных записей, которые пользователь хранит на устройстве. Имея полученную информацию, вы можете, например, автоматически заполнить форму с адресом электронной почты.

Само устройство может хранить несколько аккаунтов от разных сервисов. Вы можете отфильтровать результат по типам аккаунтов. Например, у Гугла аккаунт имеет тип «com.google», Twitter использует тип «com.twitter.android.auth.login».

Для извлечения информации требуется разрешение:

В приложении вы сначала получаете экземпляр AccountManager через метод get(), а затем можете вызвать список аккаунтов определённого типа через getAccountsByType().

Метод getAccountsByType() возвращает массив учётных записей. Если в массиве более одной учётной записи, то покажите пользователю диалоговое окно с запросом для выбора одного аккаунта.

Объект Account содержит имя учетной записи, для учетных записей Google – это адрес электронной почты, который вы можете использовать для автоматического заполнения полей или в качестве ключа в базе данных и т.д.

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

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

Метод getAccounts() выводит все учётные записи, которые есть на устройстве.

На моём устройстве оказалось три учётные записи. Чтобы понять, кому они принадлежат, я заменил account.name на account.toString() и получил следующий результат.

Теперь стало понятно.

Мы рассмотрели только базовый пример работы с AccountManager. На самом деле, у класса много других возможностей. Например, вы можете добавить новую учётную запись и управлять ею.

У меня есть приложение с включенными Push-уведомлениями.

Я хочу понять причину, по которой нам нужно «GET_ACCOUNTS» (android.permission.GET_ACCOUNTS) при реализации GCM? Некоторые пользователи вызывают озабоченность этим разрешением. Я использовал это разрешение в манифесте, так как он был указан на официальном сайте здесь .

Насколько безопасно это разрешение? И если я удалю это, из моего манифеста, будут ли push-уведомления работать?

Он использует существующее соединение для служб Google. Для устройств с предустановкой 3.0 это требует, чтобы пользователи настраивали свою учетную запись Google на своих мобильных устройствах. Учетная запись Google не является обязательным требованием для устройств под управлением Android 4.0.4 или выше.

Итак, это причина требования разрешения

Для чтения учетной записи Google.

Подробнее об этом обзоре GCM

Вход в учетную запись Google больше не требуется для работы GCM. Поэтому вам не нужно разрешение android.permission.GET_ACCOUNTS .

Если вы используете GCM API с GoogleCloudMessaging.register ), вам больше не нужно настраивать учетную запись Google на любой версии Android. Но если вы используете устаревшую библиотеку ( GCMRegistrar.register ), вам все равно нужна учетная запись Google в старых версиях (до ICS).

Подробнее см. На странице https://groups.google.com/forum/#!topic/android-gcm/ecG-RfH-Aso . Другой поток симуляторов: почему для входа в систему GCM для устройств ниже 4.0.4 ОС требуется учетная запись Google?

Для работы GCM больше не требуется разрешение GET_ACCOUNTS. Раньше это требовалось для регистрации в GCM, но недавнее обновление Play Services прекратило использование учетной записи Google даже на Froyo и Gingerbread. Если вы регистрируетесь в GCM с Play Services (т. Е. С помощью GoogleCloudMessaging.register), вам больше не нужно это разрешение на любую версию Android. Если вы используете устаревшую библиотеку (GCMRegistrar.register), вам все равно нужна учетная запись Google для версии 4.0.4, для которой требуется это разрешение.

Источник (размещен на android-gcm Google Group разработчиком Google):

Регистрация Froyo и Gingerbread осуществляется в GoogleServicesFramework, используя учетную запись Google для регистрации. Это привело к множеству ошибок auth для людей, где учетная запись не была в хорошем состоянии.

Начиная с ICS, GCM не зависит или использует учетную запись Google – вы можете использовать ее, прежде чем добавлять учетную запись или без каких-либо учетных записей.

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

Как говорили все остальные, GET_ACCOUNT необходим для устройств Android ниже 4.0.4.

Если вы похожи на меня и установили библиотеку, которая автоматически добавляет это разрешение, но вам это не нужно, вы можете сказать AndroidManifest удалить это разрешение, добавив разрешение с помощью tools:node=»remove» :

В вашем файле AndroidManifest.xml убедитесь, что атрибут xmlns:tools он определен в вашем теге manifest а затем добавьте его с remove набором:

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

* Редактировать: есть отчет об ошибке, открывающий эту функцию: https://bugzilla.xamarin.com/show_bug.cgi? >

Когда вы используете

Compile ‘com.google.android.gms: play-services: 7.5.0’ Добавить файл build.gradle означает, что автоматически добавлено разрешение GET_ACCOUNT.

  • Например, если разработчику нужно использовать только admob в проекте, укажите только это разрешение в файле build.gradle compile ‘com.google.android.gms: play-services-ads: 7.5.0’, если есть какие-либо другие разъяснения, см. Ссылку https: //developers.google.com/android/guides/setup

Я не думаю, что это на самом деле. Я протестировал его на новом устройстве Gingerbread с заводской перезагрузкой с новой учетной записью Gmail, и я мог получать сообщения GCM просто отлично без этого разрешения. Таким образом, документация НЕПРАВИЛЬНАЯ.

GET_ACCOUNT – проверить, синхронизирует ли пользователь аккаунт Google на мобильном устройстве и генерирует значение ключа для каждого пользователя (каждый аккаунт Google). Это необходимо, если на устройстве установлена ​​версия ниже Android 4.0.4.

I’m using this to get permission:

But the pop up dialog for permission asks user for access Contacts.

In pre 6.0 in Play Store with

request is named Identity and explains I need it to get device account.

6 Answers 6

That is because of Permission Groups. Basically, permissions are placed under different groups and all permissions from that group would be granted if one of them is granted.

Eg. Under «Contacts» , there is write/read contacts and get accounts, so when you ask for any of those, the popup asks for Contacts permissions.

Just thought i’l add the related(not to get accounts but permissions and groups) Oreo update info:
source: https://developer.android.com/about/versions/oreo/android-8.0-changes.html#rmp

Prior to Android 8.0 (API level 26), if an app requested a permission at runtime and the permission was granted, the system also incorrectly granted the app the rest of the permissions that belonged to the same permission group, and that were registered in the manifest.

For apps targeting Android 8.0, this behavior has been corrected. The app is granted only the permissions it has explicitly requested. However, once the user grants a permission to the app, all subsequent requests for permissions in that permission group are automatically granted.

Оцените статью