Алексей Витенко — Синхронизация данных на клиенте
DESCRIPTION
Рассмотрены механизмы, используемые для синхронизации критически важных данных между приложениями Яндекса.TRANSCRIPT
Cинхронизация данных между приложениями на одном устройстве
Алексей ВитенкоРазработчик Yandex.Store
Я.СубботникМинск. 2013
Где мы?
ПроблемаЧто делать?Как делать?
Проблема
Проблема
Проблема
Общие компоненты
Яркий пример: Account Manager
Yandex Account Manager
Yandex Account Manager
Yandex Account Manager
Общие компонентыЕщё один пример: сервис Push сообщений.
Общие компонентыЕщё один пример: сервис Push сообщений.
Yandex Push Server
User's device
Application
Push-service #1
Push-service #2
AppToken #2
AppToken #1
Push Login #2
Push Login #1
Где мы?
ПроблемаЧто делать?Как делать?
Правильное решение*
* по версии Google
Правильное решение*Отдельное приложение для всех общих
компонентов
* по версии Google
Правильное решение*
* по версии Google
Но почему же никто так не делает?
Отдельное приложение для всех общих компонентов
Это пугает пользователей
Что-то типа такого
ПримерПакет Google Play Services (Google Settings)
ПримерПакет Google Play Services (Google Settings)
ПримерПакет Google Play Services (Google Settings)
Без синхронизацииApp1 App2 App3 App4 App5
Без синхронизации
Плюсы: предельная простота решения
App1 App2 App3 App4 App5
Без синхронизации
Плюсы: предельная простота решения
App1 App2 App3 App4 App5
Без синхронизации
Плюсы: предельная простота решения
Минусы:● Дополнительная нагрузка (не на систему)● трудности при предоставлении доступа другим приложениям
App1 App2 App3 App4 App5
Примерyandex old
Ещё пример
Приложение-флагманУстановлено
Приложение-флагманУстановлено
Приложение-флагманНе установлено
А если нет флагманского приложения?
Многократное дублирование
Многократное дублирование
Многократное дублированиеПлюсы:
● В системе гарантированно будет один набор компонентов
● Пользователь не видит разницы● Наиболее интересное решение с точки
зрения разработки
Многократное дублированиеПлюсы:
● В системе гарантированно будет один набор компонентов
● Пользователь не видит разницы● Наиболее интересное решение с точки
зрения разработки
Минусы:● Наиболее сложное решение● Дополнительные затраты на пересылку
данных● Увеличение размера приложения● Обеспечение безопасности
Где мы?
ПроблемаЧто делать?Как делать?
●SharedUserID●Content Providers●Services●Broadcasts
Механизмы
SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID
SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID
НО:● Это надо делать сразу● Иначе:
–Теряется доступ к старым данным–Необходимо вручную переустанавливать приложение.
SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID
НО:● Это надо делать сразу● Иначе:
–Теряется доступ к старым данным–Необходимо вручную переустанавливать приложение.
● Всё равно надо синхронизировать данные
Content Providers
MasterBroadcast
Backup Backup Backup
Broadcast
Content ProvidersНедостатки:
●Данные с разной структуры
Content ProvidersНедостатки:
●Данные с разной структуры●Данные вычитываются по очереди из мастера
Content ProvidersНедостатки:
●Данные с разной структуры●Данные вычитываются по очереди из мастера●Системный баг и факапы
Issue 7716In app A's AndroidManifest.xml: (to serve a.apk/assets/web/* files)
<provider android:name="com.mycompany.apps.shared.WebContentProvider"
android:authorities="com.twowire.appengine.apps.app_a.web"
android:multiprocess="true"
android:exported="true" />
In app B's AndroidManifest.xml (to serve b.apk/assets/web/* files)
<provider android:name="com.mycompany.apps.shared.WebContentProvider"
android:authorities="com.twowire.appengine.apps.app_b.web"
android:multiprocess="true"
android:exported="true" />
Services
MasterBroadcast
Backup Backup Backup
Broadcast
Broadcasts
MasterBroadcast
Backup Backup Backup
Broadcast
BroadcastsДостоинства:
●Не зависит от состояния отправителя
BroadcastsДостоинства:
●Не зависит от состояния отправителяНедостатки:
●Размер передаваемых данных ограничен
Broadcasts
512 kB1024 kB256 kB htc