Pull to refresh
0
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

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

Reading time6 min
Views21K
image

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

Итак, у нас есть следующие популярные способы организации offline хранилища:
  • Сериализация в XML, JSON или другой NoSQL.
  • SQLite или другие сторонние БД.

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

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

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


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

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

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

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

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

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

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

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

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


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



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



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



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



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



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

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


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



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







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 и SQLite для Windows Phone 8.1

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





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



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



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. Запустим приложение и посмотрим как оно работает.



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

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



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

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

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



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



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



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



Заключение


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

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



Tags:
Hubs:
+23
Comments9

Articles

Change theme settings

Information

Website
www.microsoft.com
Registered
Founded
Employees
Unknown
Location
США