Сейчас на рынке есть огромное количество приложений, которые не приспособлены для работы offline, что создает неудобства для пользователей.
Некоторое время назад, для разработчиков на C# стал доступен новый Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha, который предоставляет API для создания приложения, работающих в условиях отсутствия интернета и берущий на себя все заботы о синхронизации данных между локальной базой данных и базой данных Azure. В качестве локальной базы данных создается и используется SQLite.
Итак, у нас есть следующие популярные способы организации offline хранилища:
- Сериализация в XML, JSON или другой NoSQL.
- SQLite или другие сторонние БД.
Механизмы синхронизации:
- Каждый раз обновляется локальная копия базы полностью.
- Только изменения передаются по сети.
Средства синхронизации:
- Sync Framework Toolkit
- Azure SQL Data Sync
- Разработка собственной логики и библиотек для синхронизации.
- Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha (! Новое)
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.
Для работы нам понадобится:
- Подписка Azure — на сайте можно оформить trial на месяц
- Windows 8.1
- Visual Studio 2013 Update 2
Наша задача будет состоять из следующих пунктов:
- Создание мобильного сервиса и мобильной БД в Microsoft Azure;
- Создание проекта приложения. Мы будем делать универсальное приложение в Visual Studio.
- Создание локальной БД приложения.
- Реализации синхронизации данных.
Давайте приступим…
Настройка Azure Mobile Services
1. Чтобы создать Azure Mobile Service для вашего проекта, необходимо открыть Microsoft Azure Portal и перейти в меню Mobile Services – New
Создавая облачный сервис, вы можете выбрать на каком языке вы будете писать код сервиса. На С# или 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. Создадим вспомогательный класс, который будет создавать нам локальную базу данных, уметь наполнять её данными и отправлять данные в облачный сервис.
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 и добавим туда кнопки для заполнения таблицы данными и синхронизации.
<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 код для обработки событий.
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]AppDataLocalPackages[app id]LocalState
Как видите, сейчас она пустая.
3. Добавим в неё элемент, нажав на кнопку Add Item нашего приложения.
4. Данные в базе обновятся и туда добавится запись, но наша облачная БД всё еще пуста.
5. Теперь нажмем на кнопку Sync в приложении для синхронизации баз данных и смотрим результат.
Синхронизация отработала и в облачной базе появились данные из локальной базы приложения.
Заключение
Новый Microsoft Azure Mobile Services и его SDK имеет много новых полезных возможностей для разработчиков приложений. Одна из них – это поддержка offline работы и синхронизации данных для приложений. Следуя этой инструкции, вы можете настроить синхронизацию данных для вашего Phone или Windows приложения не тратя много времени на сложные алгоритмы и написание библиотек.
Полезные ссылки
-
Blog: Deep dive on the offline support in the Azure Mobile Service managed client SDK
-
Tutorial: Get started with offline data
-
Tutorial: Handle conflicts with offline data in Mobile Services
-
Попробовать Azure бесплатно на 30 дней!
-
Загрузить бесплатную или пробную Visual Studio
-
Пройти обучающие курсы на виртуальной академии Microsoft (MVA)
- Разработка приложений на платформе Microsoft
- Кросс-платформенная разработка приложений для Windows Phone и Windows 8
- Разработка приложений с общим кодом для платформ Windows 8 и Windows Phone
- Сложные приёмы разработки приложений для Windows Phone 8
- Расширенные возможности разработки для Windows Phone 8
- или курсы по разработке в облаке Azure
- или многие другие бесплатные курсы MVA!
-
Стать разработчиком приложений Windows Phone
Автор: MissUFO