Для чого я повинен використовувати Android AccountManager?


154

Я бачив AccountManager в SDK для Android, і він використовується для зберігання інформації облікового запису. Таким чином, я не можу знайти жодного загального обговорення того, для чого він призначений. Хтось знає про будь-які корисні дискусії про те, що є задум облікового запису 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в фоновому потоці, запобігання додатків не відповідає (ANR) помилки, не вимагаючи , щоб ви явно обробляти нарізування різьблення.
  • ContentProviderзв'язки ContentResolverз спостерігачем: це означає, що легко повідомляти перегляди при зміні вмісту

Підсумок : фреймворк AccountManager/ SyncAdapter/ ContentProviderдопомагає, якщо ви хочете синхронізувати дані з веб-ресурсу. Підроблені / німі реалізації потрібні для API 7. Також

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

Нарешті, якщо ви користуєтесь SyncAdapter, серйозно подумайте про Firebase Cloud Messaging (раніше Google Cloud Messaging), який також називається "push push", щоб отримати новіші оновлення та оптимізоване використання батареї.


1
У зразку SDK єдиний факультативний елемент AccountAuthentificatorActivity є.
rds

Я ще не знайомий з цими класами, але чи можна до цих класів додавати обліковий запис з функціональними викликами без взаємодії з користувачем? Як, наприклад, додавання облікового запису мікрософт, акаунт 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.


3
Це гарна стаття, але чи вважаєте ви, що AccountManager призначений лише для облікових записів, які синхронізують контакти та електронну пошту, чи ми можемо / чи повинні використовувати їх для того, що має ідентифікатори та паролі користувачів?
Філ

@Phil: Я ніколи не використовував AccountManager, тому не можу вам сказати. Пам’ятайте, що це в комплекті з 2.0, тому, якщо ви готові працювати на пристроях із нижчим SDK, вам доведеться знайти інший спосіб обробки входу.
Макарс

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 (автентифікатором), видавши маркер під назвою Токен доступу для правомочних користувачів (третьої сторони) та надавши Компанії A (власник ресурсу) лексема. Тож жоден маркер не означає ніякої придатності.

Я детальніше розповів про це та більше AccountManagerна своєму веб-сайті тут.

Це просте додаток за допомогою AccountManager

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.