Я видел AccountManager в Android SDK и что он используется для хранения информации об учетной записи. Таким образом, я не могу найти общего обсуждения того, для чего он предназначен. Кто-нибудь знает о каких-либо полезных обсуждениях того, что представляет собой замысел AccountManager и что он покупает? Любые мнения о том, для каких типов счетов это подходит? Будете ли вы размещать информацию об учетной записи пользователя для общего веб-сервиса?
Для чего нужно использовать AccountManager для Android?
Ответ 1
Этот вопрос немного стар, но я думаю, что он по-прежнему представляет большой интерес.
 AccountManager, SyncAdapter и ContentProvider идут вместе.
-   Вы не можете иметь SyncAdapterбезAccountвAccountManager.
-   У вас не может быть SyncAdapterбезContentProvider.
Но вы можете:
-  используйте ContentProviderбез других.
-  используйте AccountManagerбез других (но вы не можете использоватьAccountManagerбезSyncAdapterперед Android 2.2/Froyo API 8)
С AccountManager/SyncAdapter/ContentProvider:
-  AccountManagerпредоставляет пользователям центральную точку (Настройки > Учетные записи) для определения своих учетных данных
-  Android решает, когда синхронизация может быть выполнена с помощью SyncAdapter. Это может быть полезно для оптимизации батареи (например, синхронизация не выполняется, когда сеть отключена).
-  ContentProvider- удобный способ обмена данными между приложениями Примечание: есть другие методы межпроцессного взаимодействия на Android.
-  ContentProviderпланирует доступ к базе данных в фоновом потокеAsyncQueryHanlderпомогает запроситьContentProviderв фоновом потоке, предотвращая ошибки Application Not Responsive (ANR), не требуя, чтобы вы явно обрабатывали потоки.
-  ContentProviderсвязывается сContentResolverobserver: это означает, что легко уведомлять представления при изменении содержимого.
  Нижняя строка: фреймворк AccountManager/SyncAdapter/ContentProvider помогает, если вы хотите синхронизировать данные с веб-ресурса. Fake/Неверные реализации требуются для API 7. Также
- Если вы хотите хранить данные, вы должны рассмотреть более простой механизм хранения данных
-  Если вам нужен только один ресурс, вы можете использовать AsyncTaskLoader
- Если вы хотите загружать изображения асинхронно, вы можете использовать специализированные библиотеки, такие как Square Picasso
- Если вы хотите только выполнить какой-либо код в заданное время, вы можете рассмотреть Сервис/Тревога
- доступен только от API >= 7 (это уже не имеет значения)
Наконец, если вы используете SyncAdapter, серьезно рассмотрите Firebase Cloud Messaging (ранее Google Cloud Messaging), а также "push-уведомления" на имеют более свежие обновления и оптимизированное использование аккумулятора.
Ответ 2
Класс AccountManager интегрирован с вашими учетными записями телефона. Поэтому, если вы будете следовать всем руководствам и будете работать правильно, вы увидите свои учетные записи в меню "Настройки- > учетные записи и синхронизация". Оттуда вы можете их настроить или удалить. Кроме того, у AccountManager есть кеш аутентификационных билетов для ваших учетных записей. Это также можно использовать, если вы не планируете синхронизировать свою учетную запись (насколько я знаю).
Если вы не хотите, чтобы ваши учетные записи отображались в этом меню, вы не должны использовать AccountManager и хранить данные учетных записей в другом месте (возможно, в общих настройках) http://developer.android.com/guide/topics/data/data-storage.html
Ответ 3
Из http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/:
Первая часть головоломки называется Аутентификатором учетной записи, который определяет, как будет выполняться учетная запись пользователя появится в разделе "Учетные записи и синхронизация" Настройки. Внедрение учетной записи Аутентификатор требует 3 штуки: служба, которая возвращает подкласс AbstractAccountAuthenticator из onBind, действие для подсказки пользователь вводит свои учетные данные, и xml файл, описывающий, как ваш учетная запись должна выглядеть, когда отображается Пользователь. Вам также необходимо добавить android.permission.AUTHENTICATE_ACCOUNTS разрешение на AndroidManifest.xml.
Ответ 4
 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 на моем веб-сайте здесь.

