Алексей Витенко — Синхронизация данных на клиенте

50
Cинхронизация данных между приложениями на одном устройстве Алексей Витенко Разработчик Yandex.Store Я.Субботник Минск. 2013

Upload: yandex

Post on 06-Jul-2015

923 views

Category:

Documents


1 download

DESCRIPTION

Рассмотрены механизмы, используемые для синхронизации критически важных данных между приложениями Яндекса.

TRANSCRIPT

Page 1: Алексей Витенко — Синхронизация данных на клиенте

Cинхронизация данных между приложениями на одном устройстве

Алексей ВитенкоРазработчик Yandex.Store

Я.СубботникМинск. 2013

Page 2: Алексей Витенко — Синхронизация данных на клиенте

Где мы?

ПроблемаЧто делать?Как делать?

Page 3: Алексей Витенко — Синхронизация данных на клиенте

Проблема

Page 4: Алексей Витенко — Синхронизация данных на клиенте

Проблема

Page 5: Алексей Витенко — Синхронизация данных на клиенте

Проблема

Page 6: Алексей Витенко — Синхронизация данных на клиенте

Общие компоненты

Яркий пример: Account Manager

Page 7: Алексей Витенко — Синхронизация данных на клиенте

Yandex Account Manager

Page 8: Алексей Витенко — Синхронизация данных на клиенте

Yandex Account Manager

Page 9: Алексей Витенко — Синхронизация данных на клиенте

Yandex Account Manager

Page 10: Алексей Витенко — Синхронизация данных на клиенте

Общие компонентыЕщё один пример: сервис Push сообщений.

Page 11: Алексей Витенко — Синхронизация данных на клиенте

Общие компонентыЕщё один пример: сервис Push сообщений.

Yandex Push Server

User's device

Application

Push-service #1

Push-service #2

AppToken #2

AppToken #1

Push Login #2

Push Login #1

Page 12: Алексей Витенко — Синхронизация данных на клиенте

Где мы?

ПроблемаЧто делать?Как делать?

Page 13: Алексей Витенко — Синхронизация данных на клиенте

Правильное решение*

* по версии Google

Page 14: Алексей Витенко — Синхронизация данных на клиенте

Правильное решение*Отдельное приложение для всех общих

компонентов

* по версии Google

Page 15: Алексей Витенко — Синхронизация данных на клиенте

Правильное решение*

* по версии Google

Но почему же никто так не делает?

Отдельное приложение для всех общих компонентов

Page 16: Алексей Витенко — Синхронизация данных на клиенте

Это пугает пользователей

Page 17: Алексей Витенко — Синхронизация данных на клиенте

Что-то типа такого

Page 18: Алексей Витенко — Синхронизация данных на клиенте

ПримерПакет Google Play Services (Google Settings)

Page 19: Алексей Витенко — Синхронизация данных на клиенте

ПримерПакет Google Play Services (Google Settings)

Page 20: Алексей Витенко — Синхронизация данных на клиенте

ПримерПакет Google Play Services (Google Settings)

Page 21: Алексей Витенко — Синхронизация данных на клиенте

Без синхронизацииApp1 App2 App3 App4 App5

Page 22: Алексей Витенко — Синхронизация данных на клиенте

Без синхронизации

Плюсы: предельная простота решения

App1 App2 App3 App4 App5

Page 23: Алексей Витенко — Синхронизация данных на клиенте

Без синхронизации

Плюсы: предельная простота решения

App1 App2 App3 App4 App5

Page 24: Алексей Витенко — Синхронизация данных на клиенте

Без синхронизации

Плюсы: предельная простота решения

Минусы:● Дополнительная нагрузка (не на систему)● трудности при предоставлении доступа другим приложениям

App1 App2 App3 App4 App5

Page 25: Алексей Витенко — Синхронизация данных на клиенте

Примерyandex old

Page 26: Алексей Витенко — Синхронизация данных на клиенте

Ещё пример

Page 27: Алексей Витенко — Синхронизация данных на клиенте

Приложение-флагманУстановлено

Page 28: Алексей Витенко — Синхронизация данных на клиенте

Приложение-флагманУстановлено

Page 29: Алексей Витенко — Синхронизация данных на клиенте

Приложение-флагманНе установлено

Page 30: Алексей Витенко — Синхронизация данных на клиенте

А если нет флагманского приложения?

Page 31: Алексей Витенко — Синхронизация данных на клиенте

Многократное дублирование

Page 32: Алексей Витенко — Синхронизация данных на клиенте

Многократное дублирование

Page 33: Алексей Витенко — Синхронизация данных на клиенте

Многократное дублированиеПлюсы:

● В системе гарантированно будет один набор компонентов

● Пользователь не видит разницы● Наиболее интересное решение с точки

зрения разработки

Page 34: Алексей Витенко — Синхронизация данных на клиенте

Многократное дублированиеПлюсы:

● В системе гарантированно будет один набор компонентов

● Пользователь не видит разницы● Наиболее интересное решение с точки

зрения разработки

Минусы:● Наиболее сложное решение● Дополнительные затраты на пересылку

данных● Увеличение размера приложения● Обеспечение безопасности

Page 35: Алексей Витенко — Синхронизация данных на клиенте

Где мы?

ПроблемаЧто делать?Как делать?

Page 36: Алексей Витенко — Синхронизация данных на клиенте

●SharedUserID●Content Providers●Services●Broadcasts

Механизмы

Page 37: Алексей Витенко — Синхронизация данных на клиенте

SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID

Page 38: Алексей Витенко — Синхронизация данных на клиенте

SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID

НО:● Это надо делать сразу● Иначе:

–Теряется доступ к старым данным–Необходимо вручную переустанавливать приложение.

Page 39: Алексей Витенко — Синхронизация данных на клиенте

SharedUserIDЗащищённый доступ приложений к файлам и базам данных приложений с тем же UserID

НО:● Это надо делать сразу● Иначе:

–Теряется доступ к старым данным–Необходимо вручную переустанавливать приложение.

● Всё равно надо синхронизировать данные

Page 40: Алексей Витенко — Синхронизация данных на клиенте

Content Providers

MasterBroadcast

Backup Backup Backup

Broadcast

Page 41: Алексей Витенко — Синхронизация данных на клиенте

Content ProvidersНедостатки:

●Данные с разной структуры

Page 42: Алексей Витенко — Синхронизация данных на клиенте

Content ProvidersНедостатки:

●Данные с разной структуры●Данные вычитываются по очереди из мастера

Page 43: Алексей Витенко — Синхронизация данных на клиенте

Content ProvidersНедостатки:

●Данные с разной структуры●Данные вычитываются по очереди из мастера●Системный баг и факапы

Page 44: Алексей Витенко — Синхронизация данных на клиенте

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" />

Page 45: Алексей Витенко — Синхронизация данных на клиенте

Services

MasterBroadcast

Backup Backup Backup

Broadcast

Page 46: Алексей Витенко — Синхронизация данных на клиенте

Broadcasts

MasterBroadcast

Backup Backup Backup

Broadcast

Page 47: Алексей Витенко — Синхронизация данных на клиенте

BroadcastsДостоинства:

●Не зависит от состояния отправителя

Page 48: Алексей Витенко — Синхронизация данных на клиенте

BroadcastsДостоинства:

●Не зависит от состояния отправителяНедостатки:

●Размер передаваемых данных ограничен

Page 49: Алексей Витенко — Синхронизация данных на клиенте

Broadcasts

512 kB1024 kB256 kB htc

Page 50: Алексей Витенко — Синхронизация данных на клиенте

Алексей ВитенкоРазработчик Yandex.Store

[email protected]

Я.СубботникМинск. 2013

Спасибо