Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Account Manager: аккаунты, токены и все-все-все

MOSDROID
December 02, 2017

Account Manager: аккаунты, токены и все-все-все

Кирилл Борисов @ Яндекс on MOSDROID #4 – watch video http://bit.ly/2A2f7E4

Расскажу вам про аккаунты в Android, как они пригодятся вашему приложению и какие трудности с ними преодолевали мы.

MOSDROID

December 02, 2017
Tweet

More Decks by MOSDROID

Other Decks in Programming

Transcript

  1. О чем пойдет речь? 〉 Аккаунты в Android - зачем

    и почему 〉 Сервис “Account Manager” 〉 Тернистый путь Яндекса 3
  2. Минусы самодельной авторизации 〉 Аккаунты уязвимы для “Clear Data” 〉

    Необходимость полного контроля процесса 〉 Управление учетными данными через приложение 9
  3. Зачем это вам? 〉 Хранение учетных данных вне приложения 〉

    Разделение между приложениями 〉 Управление через “Настройки” 〉 Возможность использовать Sync Adapter 12
  4. Sync Adapter Framework 〉 Возможность обновлять данные в фоне 〉

    По запросу, по изменению данных, периодически 〉 Использует аккаунты для аутентификации 13
  5. Что это такое? 〉 Системный сервиc 〉 Слой между бизнес-логикой

    и логикой авторизации 〉 Хранитель системной базы аккаунтов 15
  6. 17 Приложение Аутентификатор OAuth Бэкенд getAuthToken(Account) OAuth-токен Запрос на выдачу

    токена OAuth-токен Запрос к API с токеном Проверка токена Статус токена Ответ от API
  7. Связующий сервис public class AuthenticatorService extends Service { @Override public

    void onCreate() { mAuthenticator = new Authenticator(this); } @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } … }
  8. Связующий сервис <service …> <intent-filter> <action android:name="android.accounts.AccountAuthenticator" /> </intent-filter> …

    <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> </service>
  9. Библиотека “Account Manager” 〉 Единое решение для работы с аккаунтами

    “Яндекса” 〉 Используется почти во всех приложениях Яндекса 〉 Старается работать хорошо в нелегких условиях 29
  10. Первый подход: АМ <= 4.83 〉 Подход “мастер - клиент”

    〉 Имела режим автономной работы 〉 Много проблем с потерями аккаунтов и “разлогинами” 〉 Больше не поддерживается 30
  11. Недостатки подхода “мастер-клиент” 〉 Задержка смены аутентификатора ведет к потере

    аккаунтов 〉 “Мастер” в любой момент может быть убит 〉 Автономная работа ведет к рассинхронизации 38
  12. Второй подход: АМ >= 5.00 〉 Проведен масштабный рефакторинг 〉

    Изменена схема работы 〉 Отказались от автономного режима 〉 Поддерживаемая ветка 39
  13. Новая надежда: АМ 6.1.0 〉 Переписан с нуля 〉 Более

    оптимальный код 〉 Работает в отдельном процессе 〉 Имеет свой SyncAdapter для обновления данных 45
  14. 46 Account Manager Content Provider Аутентификатор Sync Adapter Бизнес-логика Зачем

    нам всё это? “Это решает больше проблем, чем создает”(с)