- AccountManager
- Разрешение GET_ACCOUNTS при использовании GCM – зачем это нужно?
- Android Basics : How to Set Up Multiple User Accounts on the Same Device
- User Profiles & Android Versions
- Creating a New User
- Switching Between User Accounts
- Letting Secondary Users Make Phone Calls & Send SMS
- Подробнее о реализации поддержки GCM на Android-клиенте
- Тут уже писали об GCM. Для чего эта статья?
- Необходимые разрешения
- Изменяется ли код регистрации (registationId)?
AccountManager
Иногда разработчик хочет отслеживать пользователя. Первый вариант, который приходит в голову — попросить его ввести какие-то данные о себе и сохранить их где-нибудь. Но просить пользователя повторять эту процедуру при покупке нового устройства не самая лучшая идея. Кроме того, вы не можете гарантировать уникальность данных. Второй вариант — запомнить идентификатор телефона. Но пользователи иногда пользуются двумя телефонами, планшетами и т.д. и тут одним идентификатором не обойдёшься. Опять проблема.
Третий вариант – использовать класс AccountManager. С разрешения пользователя, вы можете использовать AccountManager для извлечения имён учетных записей, которые пользователь хранит на устройстве. Имея полученную информацию, вы можете, например, автоматически заполнить форму с адресом электронной почты.
Само устройство может хранить несколько аккаунтов от разных сервисов. Вы можете отфильтровать результат по типам аккаунтов. Например, у Гугла аккаунт имеет тип «com.google», Twitter использует тип «com.twitter.android.auth.login».
Для извлечения информации требуется разрешение:
В приложении вы сначала получаете экземпляр AccountManager через метод get(), а затем можете вызвать список аккаунтов определённого типа через getAccountsByType().
Метод getAccountsByType() возвращает массив учётных записей. Если в массиве более одной учётной записи, то покажите пользователю диалоговое окно с запросом для выбора одного аккаунта.
Объект Account содержит имя учетной записи, для учетных записей Google – это адрес электронной почты, который вы можете использовать для автоматического заполнения полей или в качестве ключа в базе данных и т.д.
В других учётных записях в имени не обязательно может содержаться электронный адрес. Например, это может быть часть электронного адреса или просто имя пользователя.
На эмуляторе скорее всего нет никаких аккаунтов, поэтому лучше проверять на устройстве. В большинстве случаев на телефоне есть аккаунт для Гугла. В логах я проверил количество аккаунтов, а в текстовом поле вывел имя аккаунта, который оказался моим электронным адресом.
Метод getAccounts() выводит все учётные записи, которые есть на устройстве.
На моём устройстве оказалось три учётные записи. Чтобы понять, кому они принадлежат, я заменил account.name на account.toString() и получил следующий результат.
Теперь стало понятно.
Мы рассмотрели только базовый пример работы с AccountManager. На самом деле, у класса много других возможностей. Например, вы можете добавить новую учётную запись и управлять ею.
Источник
Разрешение GET_ACCOUNTS при использовании GCM – зачем это нужно?
У меня есть приложение с включенными 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?id=48153
Когда вы используете
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.
Источник
Android Basics : How to Set Up Multiple User Accounts on the Same Device
The first time a friend or family member asks if they can borrow your phone or tablet, you probably just hand it over without a second thought. But the second, third, and fourth times? Now it’s starting to become a habit, and something probably needs to be done about it.
Luckily, though, Android now has a built-in feature that allows you to set up multiple user accounts, which means you can set up a secondary user profile that shares absolutely no data with your own. It’s a great way to maintain your privacy while allowing someone else to access your device, and I’ll show you how to set it up below.
User Profiles & Android Versions
Before we begin, it should be noted that this feature is not available on some versions of Android. If you’re using a tablet, the user accounts feature became available starting with Android 4.2 Jelly Bean. For users with smartphones, however, you’ll need to be running Android 5.0 Lollipop or higher.
In addition to those stipulations, some manufacturers may have disabled the user accounts feature on their Android devices—even if they meet the minimum Android version requirement. But at the very least, the vast majority of devices running Android 5.0 or higher can take advantage of this feature.
Creating a New User
To get things started, fully expand your notification tray by swiping down from the top edge of your screen using two fingers. From here, tap the small, circular icon in the top-right corner.
Next, you can choose the «Guest» account to let someone use your phone without being able to access any of your data, but if you plan on letting this person use your phone more than once, it would be best to choose «Add user» here so that they can log in with their Google account.
Once you’ve done that, you’ll see a popup informing you about the specifics of adding a user. Press «OK» on this message, then you’ll be greeted by the new user’s lock screen. This is different than your own lock screen as it can have its own wallpaper, which is an easy way to tell which user is currently active.
From here, have you friend or family member unlock the device, then they’ll be greeted by the new user setup screen. Have them select «Continue» here, then press «Next,» and follow the prompts to sign in with their own Google account.
When setup is done, your friend or family member will be able to use your device as if it were their own. Data from both user accounts is kept separate, so your privacy is maintained.
Switching Between User Accounts
When it comes time to switch back to your own account, fully expand the notification tray again and tap the user icon in the top-right corner. From here, simply select your account, then you’ll be greeted by your own lock screen, where you can log in and access your personal data again.
Letting Secondary Users Make Phone Calls & Send SMS
By default, secondary users cannot make phone calls or send SMS messages. If you’d like to change that, make sure you’re logged in with the primary user account (your own). From there, head to the «Users» menu in Settings, then tap the gear icon next to the secondary user’s name. Finally, enable the «Turn on phone calls & SMS» feature, then you’ll be all set.
Who’s using the secondary user account on your device—your spouse, your kid, or your friend? Let us know in the comment section below, or drop us a line on Android Hacks’ Facebook or Twitter, or on Gadget Hacks’ Facebook, Google+, or Twitter.
Keep Your Connection Secure Without a Monthly Bill. Get a lifetime subscription to VPN Unlimited for all your devices with a one-time purchase from the new Gadget Hacks Shop, and watch Hulu or Netflix without regional restrictions, increase security when browsing on public networks, and more.
Источник
Подробнее о реализации поддержки GCM на Android-клиенте
Тут уже писали об GCM. Для чего эта статья?
Верно, писали. Буквально на этой неделе на Хабре была опубликована статья GCM – новый сервис Push-уведомлений от Google (если вы еще не знакомы с Google Cloud Messaging for Android, то советую прочитать её перед прочтением этой статьи, тем более в моей статье не описываются процесс создания проекта с GCM). Не знаю использовал её автор GCM в реальном приложении или нет, а вот мне пришлось. Поэтому-то я и хочу описать кое-что, чему не нашлось места в предыдущей статье, или что не было объяснено. Добавить это все комментарием в предыдущую статью, боюсь, невыполнимая задача.
Необходимые разрешения
- Тут всё ясно, без доступа к интернету GCM нам и не нужен
- GCM требует доступ к Google-аккаунту
По этому поводу в прошлой теме даже был спор, но никто из участников не решил посмотреть в исходных код. Документация этот момент умалчивает, и лишь говорит, что возможно вы захотите захватить PowerManager.WakeLock . Так вот, если вы пользуетесь стандартной библиотекой GCM, то вам придется добавлять такое разрешение.
Вкратце механизм работы такой: наше приложение подписывается на получение широковещательных запросов. При получении запроса мы устанавливаем полученному Intent’у имя класса ( setClassName() ) в имя нашего сервиса расширяющего GCMBaseIntentService , затем захватываем WakeLock с флагом PowerManager.PARTIAL_WAKE_LOCK (не даем уснуть только CPU, экран и прочее спит спокойно), запускаем Intent как сервис, по выходу из onHandleIntent сервиса освобождаем WakeLock .
Не поверили и не стали добавлять это разрешение, и в итоге получаем вот такое исключение:
Создаем свое собственное разрешение и сами его запрашиваем. Это мы делаем для того, чтобы никто кроме нас не смог получать наши сообщения.
Примечание: если вы выставили minSdkVersion в 16 или выше (Jelly Bean и последующие версии), то это разрешение вам не нужно (года через 2, надеюсь, можно будет опускать).
Изменяется ли код регистрации (registationId)?
Рассмотрим код из приложения-примера:
Вроде бы других условий нет. Так что, не изменяется? Если перейти по этой ссылке: http://developer.android.com/intl/ru/guide/google/gcm/adv.html#reg-state, можно узнать что все-таки может измениться. Таких случая два:
- Обновление программы
- Создание резервной копии и восстановление из неё
Для проверки на обновление программы я написал небольшой класс-помощник. Может быть кому-нибудь пригодится:
Источник