次の方法で共有


オフライン データ同期を .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 で次の手順を実行します。

  1. TodoApp ソリューションを右クリックし、[ソリューションの NuGet パッケージの管理 選択します。..します。

  2. 新しいタブで、[参照]選択し、検索ボックス 「Microsoft.Datasync.Client」と入力します。

    Visual Studio でオフライン NuGet を追加するスクリーンショット。

  3. Microsoft.Datasync.Client.SQLiteStore パッケージを選択します。

  4. 右側のウィンドウで、(TodoAppService.NET6 プロジェクトを除く) すべてのクライアント プロジェクトを選択します。

  5. [インストール] を選択します。

  6. メッセージが表示されたら、使用許諾契約書に同意します。

リモート サービス クライアントを更新する

TodoApp.Data プロジェクトを開き、(Services ディレクトリ内の) RemoteTodoService.cs クラスを見つけます。 クラスを次のように更新します。

  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.MAUI プロジェクトで、MainPage.xaml.cs ファイルを編集します。 RemoteTodoService の定義を次のように変更します。

TodoService = new RemoteTodoService(GetAuthenticationToken)
{
    OfflineDb = FileSystem.CacheDirectory + "/offline.db"
};

認証チュートリアルのを完了していない場合、代わりに定義は次のようになります。

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

アプリをテストする

更新アイコンが押されるまで、アプリはバックエンドと同期しません。 テストするには:

  1. azure portalを開きます。

  2. クイック スタートのリソースを含むリソース グループを開きます。

  3. quickstart データベースを選択します。

  4. クエリ エディター (プレビュー)を選択します。

  5. データベースに対して設定したのと同じ資格情報を使用して、SQL Server 認証でログインします。

    • 必要に応じて、IP アドレスへのアクセスを許可するように求められます。 許可リストを更新するリンクを選択し、[OK] を押してログインを再試行します。
  6. クエリ エディターで、「SELECT * FROM [dbo].[TodoItems]」と入力します。 次に、[実行] を選択します。

現在の TodoItems の一覧が表示されます。

S Q L クエリ エディターの結果のスクリーンショット。

次に、アプリを使用していくつかの変更を行います。 更新 (まだ) を押さないでください。

Azure portal で SQL ステートメントを繰り返し、データベース内のデータに変更が加えされていないことを確認します。

アプリの 更新 アイコンを選択して、キュー内のデータをバックエンド サービスにプッシュします。 HTTP トランザクションが [出力デバッグ] ウィンドウに表示されます。

Azure portal で SQL ステートメントを繰り返し、変更がリモート サービスにプッシュされたことを確認します。

リソースのクリーンアップ

別のクイック スタート チュートリアルを実行していない限り、バックエンド サービスに関連付けられているリソースを今すぐ削除できます。

  1. azure portalを開きます。
  2. クイック スタート リソースを保持しているリソース グループを選択します。
  3. [リソース グループ削除] を選択します。
  4. 指示に従って削除を確認します。

Azure CLI を使用することもできます。

az group delete -g quickstart

Azure Developer CLI を使用してリソースをデプロイした場合は、代わりに azd down コマンドを使用できます。

削除が完了するまでに数分かかります。

次の手順