Добавление автономной синхронизации данных в приложение Xamarin.Android
В этом руководстве рассматривается функция автономной синхронизации мобильных приложений Azure для приложения быстрого запуска Xamarin.Android. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевого подключения нет. Изменения сохраняются в локальной базе данных. Как только устройство возвращается в режим подключения к сети, эти изменения синхронизируются с удаленной внутренним сервером.
Перед началом работы с этим учебником нужно изучить учебник по Xamarin.Android, в котором описывается создание подходящей серверной службы. Мы также предполагаем, что вы добавили проверку подлинности в приложение. Однако это необязательно.
Обновление приложения для поддержки синхронизации автономных данных
При выполнении онлайн-операции вы записываете данные в IRemoteTable<T>
и считываете их из этого класса. При использовании автономной синхронизации вы записываете данные в IOfflineTable<T>
и считываете их из этого класса. IOfflineTable
использует базу данных SQLite на устройстве и синхронизируется с серверной базой данных.
В Visual Studio:
Щелкните решение правой
TodoApp
кнопкой мыши и выберите пункт "Управление пакетами NuGet для решения...".На новой вкладке нажмите кнопку "Обзор", а затем в поле поиска введите Microsoft.Datasync.Client .
Выберите пакет
Microsoft.Datasync.Client.SQLiteStore
.В правой области выберите все клиентские проекты (кроме
TodoAppService.NET6
проекта).Выберите Установить.
Примите лицензионное соглашение при появлении запроса.
Обновление клиента удаленной службы
TodoApp.Data
Откройте проект и найдите RemoteTodoService.cs
класс (в каталогеServices
). Обновите класс следующим образом:
Добавьте следующий оператор
using
в начало файла:using Microsoft.Datasync.Client.SQLiteStore;
Измените определение
_table
в видеIOfflineTable<TodoItem>
:/// <summary> /// Reference to the table used for datasync operations. /// </summary> private IOfflineTable<TodoItem> _table = null;
Добавьте новое свойство для хранения расположения автономной базы данных:
/// <summary> /// The path to the offline database /// </summary> public string OfflineDb { get; set; }
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;
Обновите автономную синхронизацию
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.Android
App.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"
};
Тестирование приложения
Приложение не синхронизируется с серверной частью до нажатия значка обновления. Чтобы проверить:
Откройте портал Azure.
Откройте группу ресурсов, содержащую ресурсы для краткого руководства.
quickstart
Выберите базу данных.Выберите редактор запросов (предварительная версия).
Войдите с помощью проверки подлинности SQL Server, используя те же учетные данные, которые вы настроили для базы данных.
- При необходимости вам будет предложено разрешить доступ к IP-адресу. Выберите ссылку, чтобы обновить список разрешений, а затем нажмите кнопку ОК , чтобы повторить вход.
В редакторе запросов введите
SELECT * FROM [dbo].[TodoItems]
. Затем выберите Выполнить.
Отобразится список текущих TodoItems.
Теперь внесите некоторые изменения в приложение. НЕ НАЖИМАЙТЕ КЛАВИШУ REFRESH (ПОКА).
Повторите инструкцию SQL в портал Azure и убедитесь, что изменения не были внесены в данные в базе данных.
Щелкните значок обновления приложения, чтобы отправить данные в очередь в серверную службу. Вы увидите http-транзакции, происходящие в окне отладки вывода.
Повторите инструкцию SQL в портал Azure и убедитесь, что изменения были отправлены в удаленную службу.
Очистка ресурсов
Если вы не выполняете другое краткое руководство по началу работы, вы можете удалить ресурсы, связанные с серверной службой.
- Откройте портал Azure.
- Выберите группу ресурсов, содержащую ресурсы быстрого запуска.
- Выберите команду Удалить группу ресурсов.
- Следуйте инструкциям, чтобы подтвердить удаление.
Также можно использовать Azure CLI:
az group delete -g quickstart
Если вы использовали интерфейс командной строки разработчика Azure для развертывания ресурсов, вы можете использовать azd down
эту команду.
Удаление займет несколько минут.
Следующие шаги
- Ознакомьтесь с документацией ПО ИСПОЛЬЗОВАНИЮ:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по