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

Post on 06-Jul-2015

923 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

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

avitenko@yandex-team.ru

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

Спасибо

top related