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

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

Этот вопрос немного устарел, но я думаю, что он по-прежнему представляет большой интерес.

AccountManager , SyncAdapter и SyncAdapter идут вместе.

  • У вас не может быть SyncAdapter без Account в AccountManager .
  • У вас не может быть SyncAdapter без SyncAdapter .

Но вы можете:

  • Используйте ContentProvider без других.
  • Используйте AccountManager без других (но вы не можете использовать AccountManager без SyncAdapter перед Android 2.2 / Froyo API 8)

С AccountManager / SyncAdapter / SyncAdapter :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Intereting Posts
Автоматическая очистка LogCat для каждого Eclipse Debug / Run? Как отключить сервис от запуска в тесте Espresso? Элементы в ListView не долгое время кликабельны после установки кнопки прослушивания в getView () Android Textview эллипсирует с несколькими строками На каком потоке выполняется onReceive () из BroacastReceiver, зарегистрированного при запуске LocalBroadcastManager? Если я лицензию моего приложения с GNU GPL3, это мешает мне продавать его на рынке Android? Phonegap – сборка для android -> Класс не найден: javac1.8 Проблема с ориентацией камеры на Android Ошибка при переключении с Android-студии 2.1 до 2.2 GoogleAuthException: неизвестно при аутентификации с помощью Cloud Endpoints Производительность Android NDK по сравнению с обычным Java-кодом Как изменить HomeButton Hilight Color при нажатии Поиск в Facebook Graph API по категориям Получить ширину и высоту растрового изображения без загрузки в память Не удается создать проект с помощью Travis-CI и Android