- PVSM.RU - https://www.pvsm.ru -

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

image

Сейчас на рынке есть огромное количество приложений, которые не приспособлены для работы offline, что создает неудобства для пользователей.
Некоторое время назад, для разработчиков на C# стал доступен новый Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1], который предоставляет API для создания приложения, работающих в условиях отсутствия интернета и берущий на себя все заботы о синхронизации данных между локальной базой данных и базой данных Azure. В качестве локальной базы данных создается и используется SQLite.

Итак, у нас есть следующие популярные способы организации offline хранилища:

  • Сериализация в XML, JSON или другой NoSQL.
  • SQLite [2] или другие сторонние БД.

Механизмы синхронизации:

  • Каждый раз обновляется локальная копия базы полностью.
  • Только изменения передаются по сети.

Средства синхронизации:

Azure Mobile Services SDK для синхронизации

Функциональность нового Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1] для синхронизации данных не идентична Sync Framework или Azure Data Sync.

С точки зрения клиентской стороны, пока есть возможность работать только с SQLite [2], но создатели обещают, что возможности будут развиваться и другие клиентские БД добавятся позже.

Серверная сторона поддерживает следующие базы данных: SQL Database, MongoDB и Azure Table Storage.

SDK [1] поддерживает следующие операции: Push (отправка на сервер), Pull (загрузка с сервера), Purge (очистка локального хранилища).

Сегодня мы остановимся на том, как создать бэкенд для вашего приложения используя Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1].

Для работы нам понадобится:

Наша задача будет состоять из следующих пунктов:

  • Создание мобильного сервиса и мобильной БД в Microsoft Azure;
  • Создание проекта приложения. Мы будем делать универсальное приложение в Visual Studio.
  • Создание локальной БД приложения.
  • Реализации синхронизации данных.

Давайте приступим…

Настройка Azure Mobile Services

1. Чтобы создать Azure Mobile Service для вашего проекта, необходимо открыть Microsoft Azure Portal [8] и перейти в меню Mobile ServicesNew

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Создавая облачный сервис, вы можете выбрать на каком языке вы будете писать код сервиса. На С# или JavaScript.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

2. Когда мобильный сервис создастся, на главной странице сервиса, вы сможете найти инструкции, как использовать его в приложениях для многих популярных платформ и фреймфорков, таких как Windows, Windows Phone, IOS, Android, Xamarin.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

3. Вы можете скачать шаблон проекта облачного сервиса, доработать его код, например, поправив модель данных как на скриншоте ниже.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

4. Затем, опубликовать в облаке из Visual Studio.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Как разработать и опубликовать облачный сервис достаточно подробно написано тут [9].

Создаем проект приложения

1. Я буду использовать проект универсального приложения для Windows и Windows Phone.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

2. После создания проекта, подключим необходимые библиотеки. Так как у нас проект и для Windows и для Windows Phone, то установить WindowsAzure.MobileServices надо для обоих проектов.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

3. В общем проекте (Shared), открываем App.xaml.cs и добавляем туда объявление мобильного сервиса:

public static MobileServiceClient MobileService = new MobileServiceClient("https://demo-backend.azure-mobile.net/", "ZDgibxPOCWSwOvbYJvAAipjAybMIJO51"); 

4. Теперь мы можем работать с данными через облачный сервис и сохранять данныe в БД.

Создание локальной базы данных и синхронизация

Теперь нам надо создать локальное хранилище данных SQLite.

1. Установим SQLite для Windows 8.1 [10] и SQLite для Windows Phone 8.1 [11]

2. Добавим SQLite в качестве используемой библиотеки для наших приложений Windows и Windows Phone.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

3. Установим и добавим в References пакет WindowsAzure.MobileServices.SQLiteStore

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

4. Откроем Shared проект и создадим там новый пустой класс с моделью данных. В моем случае, он получился вот такой:

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

5. Создадим вспомогательный класс, который будет создавать нам локальную базу данных, уметь наполнять её данными и отправлять данные в облачный сервис.

MobileServicesSync.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.WindowsAzure.MobileServices.Sync;
using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
using System.Threading;

namespace DemoApp
{    
    public static class MobileServicesSync
    {
        public static async void InitSQLiteStore()
        {
            if (!App.MobileService.SyncContext.IsInitialized)
            {
                var store = new MobileServiceSQLiteStore("DemoAppSync.db");
                store.DefineTable<MyAppItem>();
                await App.MobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
            }
        }

        public static async void InsertItem(MyAppItem item)
        {
            IMobileServiceSyncTable<MyAppItem> table = App.MobileService.GetSyncTable<MyAppItem>();
            await table.InsertAsync(item);
        }

        public static async void Push()
        {
            string errorString = null;
            try
            {
                CancellationToken token = new CancellationToken();

                await App.MobileService.SyncContext.PushAsync(token);

            }
            catch (MobileServicePushFailedException ex)
            {
                errorString = "Push failed because of sync errors: " + ex.PushResult.Errors.Count() + ", message: " + ex.Message;
            }
            catch (Exception ex)
            {
                errorString = "Push failed: " + ex.Message;
            }
        }
    }
}

Интерфейс приложения

1. Откроем MainPage.xaml и добавим туда кнопки для заполнения таблицы данными и синхронизации.

MainPage.xaml

<Page
    x:Class="DemoApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:DemoApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Name="addBtn" Content="Add item" Click="addBtn_Click"></Button>
            <Button Name="syncBtn" Content="Sync" Click="syncBtn_Click" ></Button>
        </StackPanel>
    </Grid>
</Page>

2. Добавим в MainPage.xaml.cs код для обработки событий.

MainPage.xaml.cs

    	 public MainPage()
        {
            this.InitializeComponent();
            MobileServicesSync.InitSQLiteStore();
        }

        private void addBtn_Click(object sender, RoutedEventArgs e)
        {
            MobileServicesSync.InsertItem(new MyAppItem { Text="Ура!" });
        }

        private void syncBtn_Click(object sender, RoutedEventArgs e)
        {
            MobileServicesSync.Push();
        }

Запуск и проверка

1. Запустим приложение и посмотрим как оно работает.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

2. Как только мы запустили приложение, у нас уже создалась локальная база SQLite. Мы можем найти её в папке приложения и посмотреть. Для этого я буду использовать SQLite Browser [12].

Моя БД лежит тут: C:Users[username]AppDataLocalPackages[app id]LocalState

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Как видите, сейчас она пустая.

3. Добавим в неё элемент, нажав на кнопку Add Item нашего приложения.

4. Данные в базе обновятся и туда добавится запись, но наша облачная БД всё еще пуста.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

5. Теперь нажмем на кнопку Sync в приложении для синхронизации баз данных и смотрим результат.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Синхронизация отработала и в облачной базе появились данные из локальной базы приложения.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Примечание: для тех, у кого не заработало

Может так оказаться, что создание локальной БД упадет с ошибкой. Тогда найдите и добавьте в References сборку SQLitePCL.Ext.dll. Сама она почему-то не всегда устанавливается NuGet’ом.

Работа с данными в мобильных приложениях. Реализуем offline хранилище и синхронизацию данных используя Microsoft Azure и SQLite

Заключение

Новый Microsoft Azure Mobile Services и его SDK [1] имеет много новых полезных возможностей для разработчиков приложений. Одна из них – это поддержка offline работы и синхронизации данных для приложений. Следуя этой инструкции, вы можете настроить синхронизацию данных для вашего Phone или Windows приложения не тратя много времени на сложные алгоритмы и написание библиотек.

Полезные ссылки

Автор: MissUFO

Источник [26]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/windows-phone/64688

Ссылки в тексте:

[1] Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha: http://www.nuget.org/packages/WindowsAzure.MobileServices.SQLiteStore/1.0.0-alpha

[2] SQLite: http://www.sqlite.org/

[3] Sync Framework Toolkit: http://code.msdn.microsoft.com/wpapps/Sync-Framework-Toolkit-4dc10f0e

[4] Azure SQL Data Sync: http://msdn.microsoft.com/en-us/library/hh456371.aspx

[5] Подписка Azure: http://azure.microsoft.com/

[6] Windows 8.1: http://windows.microsoft.com/en-us/windows/buy

[7] Visual Studio 2013 Update 2: http://www.microsoft.com/en-us/download/details.aspx?id=42666

[8] Microsoft Azure Portal: http://manage.windowsazure.com/

[9] тут: http://azure.microsoft.com/en-us/documentation/articles/mobile-services-windows-store-get-started/

[10] SQLite для Windows 8.1: http://visualstudiogallery.msdn.microsoft.com/1d04f82f-2fe9-4727-a2f9-a2db127ddc9a

[11] SQLite для Windows Phone 8.1: http://visualstudiogallery.msdn.microsoft.com/5d97faf6-39e3-4048-a0bc-adde2af75d1b

[12] SQLite Browser: http://sqlitebrowser.org/

[13] Blog: Deep dive on the offline support in the Azure Mobile Service managed client SDK: http://blogs.msdn.com/b/carlosfigueira/archive/2014/04/07/deep-dive-on-the-offline-support-in-the-azure-mobile-service-managed-client-sdk.aspx

[14] Tutorial: Get started with offline data: http://azure.microsoft.com/en-us/documentation/articles/Mobile-services-windows-store-dotnet-get-started-offline-data/

[15] Tutorial: Handle conflicts with offline data in Mobile Services: http://azure.microsoft.com/en-us/documentation/articles/Mobile-services-windows-store-dotnet-handling-conflicts-offline-data/

[16] Попробовать Azure: http://aka.ms/azure_trial_free_rus

[17] Загрузить: http://aka.ms/getvsrus

[18] виртуальной академии Microsoft: http://aka.ms/gomvarus

[19] Разработка приложений на платформе Microsoft: http://www.microsoftvirtualacademy.com/training-courses/app-development-on-microsoft-platform-rus

[20] Кросс-платформенная разработка приложений для Windows Phone и Windows 8: http://www.microsoftvirtualacademy.com/training-courses/cross-platforming-dev-for-windows-phone-windows-8-rus

[21] Разработка приложений с общим кодом для платформ Windows 8 и Windows Phone: http://www.microsoftvirtualacademy.com/training-courses/build-for-windows-8-windows-phone

[22] Сложные приёмы разработки приложений для Windows Phone 8: http://www.microsoftvirtualacademy.com/training-courses/windows-phone-8-for-begginers

[23] Расширенные возможности разработки для Windows Phone 8: http://www.microsoftvirtualacademy.com/training-courses/advanced-possibilities-appdev-windows-phone-8-rus

[24] курсы по разработке в облаке Azure: http://www.microsoftvirtualacademy.com/product-training/product-windows-azure-ru

[25] Стать разработчиком: http://aka.ms/wpstartrus

[26] Источник: http://habrahabr.ru/post/229041/