Xamarin.Android アプリにオフライン データ同期を追加する
このチュートリアルでは、Xamarin.Android クイックスタート アプリ向けの Azure Mobile Apps のオフライン同期フィーチャーについて説明します。 オフライン同期を使用すると、エンド ユーザーはネットワークにアクセスできなくても、データの表示、追加、変更など、モバイル アプリとやり取りできます。 変更は、ローカル データベースに格納されます。 デバイスが再びオンラインになると、これらの変更がリモート バックエンドと同期されます。
このチュートリアルを開始する前に、適切なバックエンド サービスの作成を含む 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 Portalを開きます。
クイック スタートのリソースが含まれているリソース グループを開きます。
quickstart
データベースを選択します。[クエリ エディター (プレビュー)] を選択します。
データベース用に設定したのと同じ資格情報を使用して、SQL サーバー認証でログインします。
- 必要に応じて、お使いの 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 ドキュメントをご確認ください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示