Добавление автономной синхронизации данных в приложение Xamarin.Forms

В этом учебнике рассматривается возможность автономной синхронизации мобильных приложений Azure для Xamarin.Forms. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевого подключения нет. Изменения сохраняются в локальной базе данных. Как только устройство возвращается в режим подключения к сети, эти изменения синхронизируются с удаленной внутренним сервером.

Перед началом работы с этим учебником нужно изучить учебник по Xamarin.Forms, в котором описывается создание подходящей серверной службы.

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

Обновление приложения для поддержки синхронизации автономных данных

При выполнении онлайн-операции вы записываете данные в IRemoteTable<T> и считываете их из этого класса. При использовании автономной синхронизации вы записываете данные в IOfflineTable<T> и считываете их из этого класса. IOfflineTable использует базу данных SQLite на устройстве и синхронизируется с серверной базой данных.

В Visual Studio:

  1. Щелкните решение правой TodoApp кнопкой мыши и выберите пункт "Управление пакетами NuGet для решения...".

  2. На новой вкладке нажмите кнопку "Обзор", а затем в поле поиска введите Microsoft.Datasync.Client .

    Screenshot of adding the offline NuGet in Visual Studio.

  3. Выберите пакет Microsoft.Datasync.Client.SQLiteStore.

  4. В правой области выберите все клиентские проекты (кроме TodoAppService.NET6 проекта).

  5. Выберите Установить.

  6. Примите лицензионное соглашение при появлении запроса.

Обновление клиента удаленной службы

TodoApp.Data Откройте проект и найдите RemoteTodoService.cs класс (в каталогеServices). Обновите класс следующим образом:

  1. Добавьте следующий оператор using в начало файла:

    using Microsoft.Datasync.Client.SQLiteStore;
    
  2. Измените определение _table в виде IOfflineTable<TodoItem>:

    /// <summary>
    /// Reference to the table used for datasync operations.
    /// </summary>
    private IOfflineTable<TodoItem> _table = null;
    
  3. Добавьте новое свойство для хранения расположения автономной базы данных:

    /// <summary>
    /// The path to the offline database
    /// </summary>
    public string OfflineDb { get; set; }
    
  4. InitializeAsync Обновите метод, чтобы определить автономную базу данных:

    // Create the offline store definition
    var connectionString = new UriBuilder { Scheme = "file", Path = OfflineDb, Query = "?mode=rwc" }.Uri.ToString();
    var store = new OfflineSQLiteStore(connectionString);
    store.DefineTable<TodoItem>();
    var options = new DatasyncClientOptions
    {
        OfflineStore = store,
        HttpPipeline = new HttpMessageHandler[] { new LoggingHandler() }
    };
    
    // Create the datasync client.
    _client = TokenRequestor == null 
        ? new DatasyncClient(Constants.ServiceUri, options)
        : new DatasyncClient(Constants.ServiceUri, new GenericAuthenticationProvider(TokenRequestor), options);
    
    // Initialize the database
    await _client.InitializeOfflineStoreAsync();
    
    // Get a reference to the offline table.
    _table = _client.GetOfflineTable<TodoItem>();
    
    // Set _initialized to true to prevent duplication of locking.
    _initialized = true;
    
  5. Обновите автономную синхронизацию RefreshItemsAsync() :

    /// <summary>
    /// Refreshes the TodoItems list manually.
    /// </summary>
    /// <returns>A task that completes when the refresh is done.</returns>
    public async Task RefreshItemsAsync()
    {
        await InitializeAsync();
    
        // First, push all the items in the table.
        await _table.PushItemsAsync();
    
        // Then, pull all the items in the table.
        await _table.PullItemsAsync();
    
        return;
    }
    

Настройка расположения автономной базы данных

В проекте измените TodoApp.FormsApp.xaml.cs файл. Измените определение следующего RemoteTodoService вида:

TodoService = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Если вы еще не выполнили руководство по проверке подлинности, это определение должно выглядеть следующим образом:

TodoService = new RemoteTodoService()
{
    OfflineDb = Xamarin.Essentials.FileSystem.AppDataDirectory + "/offline.db"
};

Тестирование приложения

Приложение не синхронизируется с серверной частью до нажатия значка обновления. Чтобы проверить:

  1. Откройте портал Azure.

  2. Откройте группу ресурсов, содержащую ресурсы для краткого руководства.

  3. quickstart Выберите базу данных.

  4. Выберите редактор запросов (предварительная версия).

  5. Войдите с помощью проверки подлинности SQL Server, используя те же учетные данные, которые вы настроили для базы данных.

    • При необходимости вам будет предложено разрешить доступ к IP-адресу. Выберите ссылку, чтобы обновить список разрешений, а затем нажмите кнопку ОК , чтобы повторить вход.
  6. В редакторе запросов введите SELECT * FROM [dbo].[TodoItems]. Затем выберите Выполнить.

Отобразится список текущих TodoItems.

Screenshot of the results in the S Q L query editor.

Теперь внесите некоторые изменения в приложение. НЕ НАЖИМАЙТЕ КЛАВИШУ REFRESH (ПОКА).

Повторите инструкцию SQL в портал Azure и убедитесь, что изменения не были внесены в данные в базе данных.

Щелкните значок обновления приложения, чтобы отправить данные в очередь в серверную службу. Вы увидите http-транзакции, происходящие в окне отладки вывода.

Повторите инструкцию SQL в портал Azure и убедитесь, что изменения были отправлены в удаленную службу.

Очистка ресурсов

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

  1. Откройте портал Azure.
  2. Выберите группу ресурсов, содержащую ресурсы быстрого запуска.
  3. Выберите команду Удалить группу ресурсов.
  4. Следуйте инструкциям, чтобы подтвердить удаление.

Также можно использовать Azure CLI:

az group delete -g quickstart

Если вы использовали интерфейс командной строки разработчика Azure для развертывания ресурсов, вы можете использовать azd down эту команду.

Удаление займет несколько минут.

Следующие шаги