オフライン データ同期を .NET MAUI アプリに追加する
手記
この製品は提供終了です。 .NET 8 以降を使用するプロジェクトの代わりに、Community Toolkit Datasync ライブラリを参照してください。
このチュートリアルでは、Azure Mobile Apps for .NET MAUI のオフライン同期機能について説明します。 オフライン同期を使用すると、ネットワーク接続がない場合でも、エンド ユーザーはモバイル アプリと対話できます。 変更はローカル データベースに格納されます。 デバイスがオンラインに戻ると、これらの変更はリモート バックエンドと同期されます。
このチュートリアルを開始する前に、適切なバックエンド サービスの作成を含む .NET MAUI クイック スタート チュートリアルを完了しておく必要があります。
オフライン同期機能の詳細については、「Azure Mobile Appsでのオフライン データ同期
オフライン同期をサポートするようにアプリを更新する
オンライン操作では、IRemoteTable<T>
に対する読み取りと書き込みを行います。 オフライン同期を使用する場合は、代わりに IOfflineTable<T>
との間で読み取りと書き込みを行います。
IOfflineTable
は、デバイス上の SQLite データベースによってサポートされ、バックエンド データベースと同期されます。
Visual Studio で次の手順を実行します。
TodoApp
ソリューションを右クリックし、[ソリューションの NuGet パッケージの管理 選択します。..します。新しいタブで、[参照]
選択し、検索ボックス 「Microsoft.Datasync.Client 」と入力します。Microsoft.Datasync.Client.SQLiteStore
パッケージを選択します。右側のウィンドウで、(
TodoAppService.NET6
プロジェクトを除く) すべてのクライアント プロジェクトを選択します。[
インストール] を選択します。 メッセージが表示されたら、使用許諾契約書に同意します。
リモート サービス クライアントを更新する
TodoApp.Data
プロジェクトを開き、(Services
ディレクトリ内の) RemoteTodoService.cs
クラスを見つけます。 クラスを次のように更新します。
次の
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.MAUI
プロジェクトで、MainPage.xaml.cs
ファイルを編集します。
RemoteTodoService
の定義を次のように変更します。
TodoService = new RemoteTodoService(GetAuthenticationToken)
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
認証チュートリアルのを完了していない場合、代わりに定義は次のようになります。
TodoService = new RemoteTodoService()
{
OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};
アプリをテストする
更新アイコンが押されるまで、アプリはバックエンドと同期しません。 テストするには:
azure portal
を開きます。 クイック スタートのリソースを含むリソース グループを開きます。
quickstart
データベースを選択します。クエリ エディター (プレビュー)を選択します。
データベースに対して設定したのと同じ資格情報を使用して、SQL Server 認証でログインします。
- 必要に応じて、IP アドレスへのアクセスを許可するように求められます。 許可リストを更新するリンクを選択し、[OK] を押してログインを再試行します。
クエリ エディターで、「
SELECT * FROM [dbo].[TodoItems]
」と入力します。 次に、[実行] を選択します。
現在の TodoItems の一覧が表示されます。
次に、アプリを使用していくつかの変更を行います。 更新 (まだ) を押さないでください。
Azure portal で SQL ステートメントを繰り返し、データベース内のデータに変更が加えされていないことを確認します。
アプリの 更新 アイコンを選択して、キュー内のデータをバックエンド サービスにプッシュします。 HTTP トランザクションが [出力デバッグ] ウィンドウに表示されます。
Azure portal で SQL ステートメントを繰り返し、変更がリモート サービスにプッシュされたことを確認します。
リソースのクリーンアップ
別のクイック スタート チュートリアルを実行していない限り、バックエンド サービスに関連付けられているリソースを今すぐ削除できます。
- azure portal
を開きます。 - クイック スタート リソースを保持しているリソース グループを選択します。
- [リソース グループ
削除] を選択します。 - 指示に従って削除を確認します。
Azure CLI を使用することもできます。
az group delete -g quickstart
Azure Developer CLI を使用してリソースをデプロイした場合は、代わりに azd down
コマンドを使用できます。
削除が完了するまでに数分かかります。
次の手順
- HOW TO のドキュメントを確認します。
- ASP を します。NET6 サービスのドキュメント
- .NET クライアント ドキュメント を
する