2.82M
Category: informaticsinformatics

Единая авторизация

1.

2.

Единая
авторизация
Скородумов Антон
Джигирей Андрей

3.

Тезисы
1.
Пользователь может пользоваться приложением без авторизации

4.

Тезисы
1.
2.
Пользователь может пользоваться приложением без авторизации
Авторизовавшись в одном приложении пользователь автоматически авторизуется во всех

5.

Тезисы
1.
2.
3.
Пользователь может пользоваться приложением без авторизации
Авторизовавшись в одном приложении пользователь автоматически авторизуется во всех
Приложений может быть ооооооочень много

6.

Этапы реализации
1.
2.
Единая авторизация между приложениями
Мультиаккаунт

7.

Функциональность. 1 Этап.
Анонимная авторизация



Уникальный UUID
Полноценный аккаунт
Push-нотификации

8.

Функциональность. 1 Этап.
Анонимная авторизация
Авторизация через номер телефона

Подтверждение номера телефона

9.

Функциональность. 1 Этап.
Анонимная авторизация
Авторизация через номер телефона
Выход из приложения

Переход к анонимному аккаунту

10.

Функциональность. 1 Этап.
Анонимная авторизация
Авторизация через номер телефона
Выход из приложения
Регистрация устройства. Получение Push уведомлений

11.

Так закончился первый этап

12.

Недостатки
Одна авторизация на все приложения

13.

Недостатки
Одна авторизация на все приложения
Выход в одном приложении = выходу во всех

14.

Недостатки
Одна авторизация на все приложения
Выход в одном приложении = выходу во всех
Нельзя использовать разные аккаунты в разных приложениях

Сменив аккаунт в одном приложении он автоматически сменится во всех

15.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта



Уникальный UUID
Полноценный аккаунт
Push-нотификации

16.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона



Подтверждение номера телефона
Авторизация с анонимного аккаунта
Авторизация с подтвержденного аккаунта

17.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов



Приложения не ограничиваются одним аккаунтов
Можно добавлять новые аккаунты
Список аккаунтов синхронизируется между разными приложениями

18.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений





Одно приложение - один аккаунт
К каждому приложению можно привязать как один и тот же аккаунт, так и любой другой
В каждом приложении можно выбрать свой аккаунт. Переключение аккаунта
Изменение аккаунта в одном приложении = изменению во всех
Отправка пуш уведомлений

19.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений
Стилизация UI
○ Приложений много - приложения разные

У каждого приложения своя цветовая палитра и свой дизайн

20.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений
Стилизация UI
Отвязка аккаунта



Переключение на анонимный аккаунт
Отправка пуш уведомлений
Отвязка одного приложения от аккаунта != отвязки аккаунта во всех приложениях

21.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений
Стилизация UI
Отвязка аккаунта
Удаление аккаунта






Удаление всех данных
Удаление аккаунта в одном приложении = удаление аккаунта во всех приложениях
Удаление аккаунта в одном приложении = удаление аккаунта на всех устройствах
Переключение на удалённый аккаунт
Удаление текущего аккаунта
Вход в приложение с удаленных аккаунтом

22.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений
Стилизация UI
Отвязка аккаунта
Удаление аккаунта
InApps

Единая авторизация в inApp приложениях

23.

Функциональность. 2 Этап.
Подтверждение анонимного аккаунта
Авторизация по номеру телефона
Список аккаунтов
Один аккаунт - несколько приложений
Стилизация UI
Отвязка аккаунта
Удаление аккаунта
InApps
Миграции


Обновление со старого этапа на новый
Добавление новых приложений в ЦГ

24.

Так закончился второй этап

25.

Итоги
Избавились от всех недостатков
Пользователь может выбрать любой аккаунт в любом приложении
Отвязка аккаунта происходит только в одном приложении
Добавлено удаление аккаунтов

26.

Единая
Авторизация iOS

27.

Особенности реализации iOS. AppGroups.
➢ Механизм, который позволяет передавать данные между приложениями на платформе
iOS

28.

Особенности реализации iOS. AppGroups.
Минусы:
1.
2.
Данные передаются между приложениями незашифровано.
Каждое приложение нужно настраивать отдельно.

29.

Особенности реализации iOS. AppGroups.
Реакция на минусы:
1.
2.
Доработать для работы с Keychain sharing
При наличии опыта - делается очень быстро. И заменить ничем не получится

30.

Особенности реализации iOS. AppGroups.
Плюсы:
1.
2.
Обмен любыми примитивными данными между приложениями.
Механизм очень простой

31.

Особенности реализации iOS. AppGroups.
Удаление данных группы аккаунтов.
1.
2.
У приложений, входящих в группу, создается единое хранилище.
Удаление происходит только в случае удаления ВСЕХ приложений, объединенных в группу

32.

Особенности реализации iOS. Carthage.
1. Дедубликация кода
➢ Реализация функционала отдельным фреймворком. Для подключения модуля в
приложение используется менеджер зависимостей Carthage

33.

Особенности реализации iOS. Carthage.
1.
2.
3.
Сборка фреймворка
Подключение модуля авторизации в проект
Реализация конфигуратора в приложении

34.

Особенности реализации iOS
Конфигурирование

35.

Особенности реализации iOS
Конфигурирование
Очевидные
1.
2.
3.
Настройка версии
Логирование
Дебаг

36.

Особенности реализации iOS
Конфигурирование
Неочевидные
1.
2.
3.
Настройка группы
Настройка идентификатора приложения
Listener изменения аккаунта

37.

Особенности реализации iOS
Конфигурирование

38.

Особенности реализации iOS
UI внутри фреймворка
1.
2.
3.
xib
Bundle
UITableView, UITableViewCell

39.

Особенности реализации iOS
Кастомизация UI

40.

Особенности реализации iOS

41.

Основные проблемы, с которыми
столкнулись
1.
Количество разнооборазных use case

42.

Основные проблемы, с которыми
столкнулись
1.
2.
Количество разнооборазных use case
Реализация UI внутри фреймворка
a.
b.
c.
Собственный бандл
Проблема с поиском ячеек
Кастомизация

43.

Основные проблемы, с которыми
столкнулись
1.
2.
3.
Количество разнооборазных use case
Реализация UI внутри фреймворка
Конфигурирование модуля
a.
b.
Определение общей конфигурации
Delegate для модуля

44.

Основные проблемы, с которыми
столкнулись
1.
2.
3.
4.
Количество разнооборазных use case
Реализация UI внутри фреймворка
Конфигурирование модуля
Синхронизация данных между одновременно работающими приложениями
a.
Сценарии одновременно запущенных приложений

45.

Основные проблемы, с которыми
столкнулись
1.
2.
3.
4.
5.
Количество разнооборазных use case
Реализация UI внутри фреймворка
Конфигурирование модуля
Синхронизация данных между одновременно работающими приложениями
Миграция между этапами без разавторизации пользователей
a.
b.
Миграция между этапом 1 и 2
Миграция с ЖКХ

46.

Единая
Авторизация
Android
Account Manager

47.

Один аккаунт для нескольких
приложений
Приложения группы ЦГ используют одну и более учетных записей.

48.

Один аккаунт для нескольких
приложений
Приложения группы ЦГ используют одну и более учетных записей.
Смена учетной записи в одном приложении никак не влияет на другие приложения.

49.

Один аккаунт для нескольких
приложений
Приложения группы ЦГ используют одну и более учетных записей.
Смена учетной записи в одном приложении никак не влияет на другие приложения.
Удаление учетной записи в одном приложении оказывает влияние на другие приложения.

50.

Один аккаунт для нескольких
приложений
Приложения группы ЦГ используют одну и более учетных записей.
Смена учетной записи в одном приложении никак не влияет на другие приложения.
Удаление учетной записи в одном приложении оказывает влияние на другие приложения.
Обновление токена синхронизированное

51.

Android Account Manager
Класс, обеспечивающий доступ к централизованному системному
хранилищу учетных записей пользователей.
Позволяет ввести учетные данные один раз на одну учетную запись,
и использовать в дальнейшем эту учетную запись в нескольких
приложениях для доступа к общим ресурсам.
Позволяет пользоваться такой штукой как SyncAdapter

52.

53.

Account
class Account(name: String, type: String)
Системный класс, с которым работает Account Manager
type - ключевое поле по которому система идентифицирует кому делегировать работу с
аккаунтом

54.

AbstractAccountAuthenticator
Отвечает за работу с аккаунтом определенного типа.
Выдача токена
Обновление токена
Добавление нового аккаунта

55.

Анонимная учетная запись
При обращении приложения за токеном, если нет ни одного
аккаунта в системе, создается дефолтный анонимный аккаунт.

56.

Добавление нового аккаунта из
системного UI

57.

Добавление нового аккаунта из
приложения

58.

59.

UserData Key-Value storage
Имеется у каждого аккаунта.
В нем храним связку аккаунта и приложений в которых он используется.
Храним сериализованным в строку массивом имен пакетов приложений

60.

Master Authenticator
Обслуживанием аккаунта занимается единовременно только одно приложение - Мастер.
При установке нескольких приложений система как правило выбирает мастером первое
установленное приложение. Но это не точно...

61.

Использование в проектах
1.
2.
3.
4.
5.
Упаковываем все в библиотеку *.aar
Публикуем на локальный maven repository
Добавляем как обычную зависимость в build.gradle
Настраиваем манифест
Кастомизируем UI с помощью тем
Респект Сереге за сервер :)

62.

Manifest.xml

63.

Build.gradle
Корневой
Зависимости

64.

Dagger 2

65.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .

66.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.

67.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.

68.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.
Полное отсутствие нормальной документации и примеров.

69.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.
Полное отсутствие нормальной документации и примеров.
Много всякого бойлерплейта при сериализации и десериализации данных в cтроки

70.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.
Полное отсутствие нормальной документации и примеров.
Много всякого бойлерплейта при сериализации и десериализации данных в cтроки
Проблема с эксепшенами, так как работает все через интенты. Можно прокинуть из
ауфентикатора только определенные эксепшены, либо положить мессаж в бандл. На
выходе всегда AuthenticatorException. Костыль - сериализовать свои эксепшены в
мессаж который кладется в бандл по еррор коду, и доставать их потом из
AuthenticatorException.message и десериализовать обратно.

71.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.
Полное отсутствие нормальной документации и примеров.
Много всякого бойлерплейта при сериализации и десериализации данных в cтроки
Проблема с эксепшенами, так как работает все через интенты. Можно прокинуть из
ауфентикатора только определенные эксепшены, либо положить мессаж в бандл. На
выходе всегда AuthenticatorException. Костыль - сериализовать свои эксепшены в
мессаж который кладется в бандл по еррор коду, и доставать их потом из
AuthenticatorException.message и десериализовать обратно.
При добавлении аккаунта и одновременной передачи UserData на некоторых версиях
андроида, UserData не добавляется к аккаунту, поэтому приходится добавлять ее позже

72.

Грабли и боль
Нельзя просто так переименовать аккаунт ибо не доступно в старых API. Надо удалять
старый и добавлять новый .
Начиная с 7 андроида системная бд аккаунтов дропается если удаляется мастер
приложение.
Все методы для доступа к аккаунту асинхронные( возвращают Future), в обертке
пришлось делать их синхронизирующими что приводит к блокировке потока в котором
они вызываются - разруливать надо самостоятельно при использовании либы.
Полное отсутствие нормальной документации и примеров.
Много всякого бойлерплейта при сериализации и десериализации данных в cтроки
Проблема с эксепшенами, так как работает все через интенты. Можно прокинуть из
ауфентикатора только определенные эксепшены, либо положить мессаж в бандл. На
выходе всегда AuthenticatorException. Костыль - сериализовать свои эксепшены в
мессаж который кладется в бандл по еррор коду, и доставать их потом из
AuthenticatorException.message и десериализовать обратно.
При добавлении аккаунта и одновременной передачи UserData на некоторых версиях
андроида, UserData не добавляется к аккаунту, поэтому приходится добавлять ее позже
Много бойлерплейта в юнит тестах. Пришлось использовать Java Reflection API помимо
Mockito. Много юзкейсов и юнит тестов - 59

73.

Братья наши луноликие
English     Русский Rules