Как стать автором
Обновить
0
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

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

Время на прочтение6 мин
Количество просмотров21K
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 приложения не тратя много времени на сложные алгоритмы и написание библиотек.

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



Теги:
Хабы:
+23
Комментарии9

Публикации

Изменить настройки темы

Информация

Сайт
www.microsoft.com
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
США

Истории