Для чего мне использовать Android AccountManager?

154

Я видел AccountManager в Android SDK, и он используется для хранения информации об учетной записи. Таким образом, я не могу найти никакого общего обсуждения того, для чего это предназначено. Кто-нибудь знает какие-либо полезные дискуссии о том, что намерение позади AccountManager и что это покупает Вас? Любое мнение о том, для каких типов счетов это подходит? Будет ли это место, куда вы поместите информацию об учетной записи своего пользователя для общего веб-сервиса?

Фил
источник
Обратите внимание, я нацеливаюсь на 2.1 и выше, поэтому я могу использовать AccountManager, если это разумный выбор
Фил
7
В этом посте есть раздел об этом вопросе: udinic.wordpress.com/2013/04/24/…
Udinic
@Udinic - Спасибо. Много помощи!
Чад Бингхэм
Эта тема рассматривается на этом сайте: www.digigene.com/android/accounts-in-android/
Али Нем
Существует также библиотека для управления учетными записями в Android здесь .
Али Нем

Ответы:

94

Этот вопрос немного старый, но я думаю, что он все еще интересен.

AccountManager, SyncAdapterИ ContentProviderидти вместе.

Но вы можете:

С AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager дает пользователям центральную точку (Настройки> Учетные записи) для определения их учетных данных
  • Android решает, когда можно выполнить синхронизацию через SyncAdapter. Это может быть полезно для оптимизации батареи (например, синхронизация не выполняется, когда сеть не работает)
  • ContentProviderЭто удобный способ обмена данными между приложениями. Примечание . В Android есть и другие способы межпроцессного взаимодействия .
  • ContentProviderпланирует доступ к базе данных в фоновом потоке . AsyncQueryHanlderПомогает запрашивать ContentProviderв фоновом потоке, предотвращая ошибки Application Not Responsive (ANR) и не требуя явной обработки потоков.
  • ContentProviderпривязывается к ContentResolverроссийскому наблюдателю: это означает, что легко уведомлять мнения при изменении контента

Итог : фреймворк AccountManager/ SyncAdapter/ ContentProviderпомогает, если вы хотите синхронизировать данные с веб-ресурса. Ложные / глупые реализации требуются в API 7. Также

  • Если вы хотите только хранить данные, вы должны рассмотреть более простой механизм для хранения данных
  • Если вам нужно только получить единственный ресурс, вы можете использовать AsyncTaskLoader
  • Если вы хотите загружать изображения асинхронно, вы можете использовать специализированные библиотеки, такие как Square Picasso
  • Если вы хотите выполнить какой-то код в определенный момент времени, вы можете рассмотреть вопрос об обслуживании / сигнализации
  • доступно только из API> = 7 (это больше не имеет значения)

Наконец, если вы используете SyncAdapter, серьезно подумайте о Firebase Cloud Messaging (ранее Google Cloud Messaging), также известном как «push-уведомления», чтобы иметь более свежие обновления и оптимизированное использование батареи.

выстр
источник
1
В примере SDK AccountAuthentificatorActivity является единственным дополнительным компонентом.
Rds
Я еще не знаком с этими классами, но возможно ли для этих классов добавить учетную запись с вызовами функций без взаимодействия с пользователем? Как, например, добавление учетной записи Microsoft Exchange, учетной записи Google, учетной записи POP3 / IMAP. Спасибо.
DackyD
спасибо @rds, но, исходя из вашего объяснения, кажется, что примера кода недостаточно. Похоже, мне нужно реализовать SyncAdapter и ContentProvider, чтобы достичь своих целей. Поправь меня, если я не прав :)
dackyD
Совершенно верно. Это был смысл моего первого абзаца, они идут вместе, и невозможно использовать один без других.
Rds
23

Класс AccountManager интегрирован с вашими учетными записями телефона. Поэтому, если вы будете следовать всем инструкциям и работать правильно, вы увидите свои учетные записи в меню «Настройки-> Учетные записи и синхронизация». Оттуда вы можете настроить их или даже удалить их. Кроме того, accountManager имеет кеш аутентификационных билетов для ваших аккаунтов. Это также можно использовать, если вы не планируете синхронизировать свою учетную запись (насколько я знаю).

Если вы не хотите, чтобы ваши учетные записи отображались в этом меню, вам не следует использовать AccountManager и хранить данные учетных записей в другом месте (возможно, в общих настройках) http://developer.android.com/guide/topics/data/data -storage.html

болтливость
источник
14

От http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

Первая часть головоломки называется «Аутентификатор учетной записи», которая определяет, как учетная запись пользователя будет отображаться в настройках «Аккаунты и синхронизация». Для реализации средства проверки подлинности учетной записи требуется 3 компонента: служба, которая возвращает подкласс класса AbstractAccountAuthenticator из метода onBind, операция, предлагающая пользователю ввести свои учетные данные, и файл XML, описывающий, как должна выглядеть ваша учетная запись при отображении для пользователя. Вам также необходимо добавить разрешение android.permission.AUTHENTICATE_ACCOUNTS в свой AndroidManifest.xml.

Macarse
источник
3
Это хорошая статья, но вы думаете, что AccountManager предназначен только для учетных записей, которые синхронизируют контакты и электронную почту, или мы можем / должны ли мы использовать его для всего, что имеет идентификаторы пользователей и пароли?
Фил
@Phil: я никогда не использовал AccountManager, поэтому не могу вам сказать. Помните, что это идет с 2.0, поэтому, если вы хотите работать на устройствах с более низким SDK, вам нужно будет найти другой способ обработки входа в систему.
Macarse
6
Вы можете использовать менеджер учетных записей для любого типа учетных записей, синхронизируя любые виды данных, которые вы храните любым способом. Посмотрите на github.com/maxpower47/PinDroid пример использования его для синхронизации закладок с базой данных sqlite.
maxpower47
7

Это AccountManagerхорошо по следующим причинам:

  • Первый - хранить несколько имен учетных записей с разными уровнями доступа к функциям приложения под одним типом учетной записи. Например, в приложении для потоковой передачи видео у одного может быть два имени учетной записи: одно с демонстрационным доступом к ограниченному количеству видео, а другое с полным доступом к месяцам ко всем видео. Однако это не главная причина использования Accounts, поскольку вы можете легко управлять этим в своем приложении, не прибегая к этой причудливой Accountsвещи…
  • Другое преимущество использования Accountsсостоит в том, чтобы избавиться от традиционной авторизации с именем пользователя и паролем каждый раз, когда пользователь запрашивает авторизованную функцию, потому что аутентификация происходит в фоновом режиме, а пользователя запрашивают его пароль только в определенных условиях, что Я доберусь до этого позже.
  • Использование Accountsфункции в Android также устраняет необходимость определения собственного типа учетной записи. Вы, вероятно, сталкивались с приложениями, использующими учетные записи Google для авторизации, что избавляет от необходимости создавать новую учетную запись и запоминать ее учетные данные для пользователя.
  • Accounts можно добавить независимо через Настройки → Аккаунты
  • Межплатформенной авторизацией пользователей можно легко управлять с помощью Accounts. Например, клиент может одновременно получать доступ к защищенным материалам на своем устройстве Android и ПК без необходимости повторных входов в систему.
  • С точки зрения безопасности, использование одного и того же пароля в каждом запросе к серверу допускает возможное прослушивание в незащищенных соединениях. Для предотвращения кражи пароля здесь недостаточно шифрования пароля.
  • Наконец, важной причиной использования этой Accountsфункции в Android является разделение двух сторон, участвующих в любом бизнесе, от Accountsтак называемого аутентификатора и владельца ресурса, без ущерба для учетных данных клиента (пользователя). Термины могут показаться довольно расплывчатыми, но не сдавайтесь, пока не прочитаете следующий абзац… 😉

Позвольте мне остановиться на последнем примере приложения для потокового видео. Компания A является владельцем бизнеса по потоковому видео, заключившего договор с компанией B на предоставление ее отдельным членам премиальных потоковых услуг. Компания B использует метод имени пользователя и пароля для распознавания своего пользователя. Для компании A, чтобы распознать премиум-членов B, одним из способов было бы получить их список от B и использовать аналогичный механизм сопоставления имени пользователя и пароля. Таким образом, аутентификатор и владелец ресурса совпадают (Компания A). Помимо обязательства пользователей запоминать второй пароль, весьма вероятно, что они устанавливают тот же пароль, что и профиль их компании B для использования услуг от A. Это, очевидно, не выгодно.

Чтобы устранить вышеуказанные недостатки, была введена OAuth. В качестве открытого стандарта для авторизации в приведенном выше примере OAuth требует, чтобы авторизация была выполнена Компанией B (аутентификатор), выпуская некоторый токен под названием Access Token для соответствующих пользователей (третье лицо) и затем предоставляя Компании A (владельцу ресурса) знак Таким образом, отсутствие знака означает отсутствие права на участие.

Я подробно остановился на этом и больше AccountManagerна моем сайте здесь.

Это простое приложение, использующее AccountManager

Али Нем
источник