Поделиться через


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

Заметка

Этот продукт отставлен. Сведения о замене проектов с помощью .NET 8 или более поздней версии см. вбиблиотеке Community Toolkit Datasync.

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

Перед началом работы с этим руководством необходимо выполнить краткое руководство по использованию платформы uno Platform, включающее создание подходящей серверной службы. Мы также предполагаем, что вы добавили проверки подлинности в приложение. Вы можете добавить автономные возможности в приложение без проверки подлинности.

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

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

Добавление необходимых пакетов NuGet

В Visual Studio:

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

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

    снимок экрана: добавление автономного NuGet в 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.Uno измените файл MainPage.xaml.cs. Измените определение RemoteTodoService следующим образом:

_service = new RemoteTodoService(async () => await GetAuthenticationToken())
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/offline.db"
};

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

_service = new RemoteTodoService()
{
    OfflineDb = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/offline.db"
};

Заметка

Вы можете хранить автономную базу данных, где есть разрешения на чтение и запись и создание в системе Windows. Класс Environment.SpecialFolder предоставляет стандартные расположения в соответствии с приложением.

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

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

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

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

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

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

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

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

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

снимок экрана: результаты в редакторе запросов S Q L.

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

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

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

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

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

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

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

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

az group delete -g quickstart

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

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

Дальнейшие действия