Android モバイル アプリのオフライン同期の有効化Enable offline sync for your Android mobile app

注意

Visual Studio App Center は、モバイル アプリ開発の中心となるエンドツーエンドの統合サービスをサポートしています。Visual Studio App Center supports end to end and integrated services central to mobile app development. 開発者は、ビルドテスト配布のサービスを使用して、継続的インテグレーションおよびデリバリー パイプラインを設定できます。Developers can use Build, Test and Distribute services to set up Continuous Integration and Delivery pipeline. アプリがデプロイされたら、開発者は分析および診断のサービスを利用してアプリの状態と使用状況を監視し、プッシュ サービスを利用してユーザーと関わることができます。Once the app is deployed, developers can monitor the status and usage of their app using the Analytics and Diagnostics services, and engage with users using the Push service. また、開発者は Auth を利用してユーザーを認証し、データ サービスを利用してクラウド内のアプリ データを保持および同期することもできます。Developers can also leverage Auth to authenticate their users and Data service to persist and sync app data in the cloud.

モバイル アプリケーションにクラウド サービスを統合することを検討している場合は、今すぐ App Center にサインアップしてください。If you are looking to integrate cloud services in your mobile application, sign up with App Center today.

概要Overview

このチュートリアルでは、Android 向け Azure Mobile Apps のオフライン同期機能について説明します。This tutorial covers the offline sync feature of Azure Mobile Apps for Android. オフライン同期を使用すると、エンド ユーザーはネットワークにアクセスできなくても、—データの表示、追加、変更など、—モバイル アプリとやり取りできます。Offline sync allows end users to interact with a mobile app—viewing, adding, or modifying data—even when there is no network connection. 変更は、ローカル データベースに格納されます。Changes are stored in a local database. デバイスが再びオンラインになると、これらの変更がリモート バックエンドと同期されます。Once the device is back online, these changes are synced with the remote backend.

Azure Mobile Apps を初めて使用する場合は、チュートリアル「 Android アプリの作成」を完了しておく必要があります。If this is your first experience with Azure Mobile Apps, you should first complete the tutorial Create an Android App. ダウンロードしたクイック スタートのサーバー プロジェクトを使用しない場合は、データ アクセス拡張機能パッケージをプロジェクトに追加する必要があります。If you do not use the downloaded quick start server project, you must add the data access extension packages to your project. サーバーの拡張機能パッケージの詳細については、「 Work with the .NET backend server SDK for Azure Mobile Apps (Azure Mobile Apps 用の .NET バックエンド サーバー SDK を操作する)」を参照してください。For more information about server extension packages, see Work with the .NET backend server SDK for Azure Mobile Apps.

オフラインの同期機能の詳細については、トピック「 Azure Mobile Apps でのオフライン データ同期」をご覧ください。To learn more about the offline sync feature, see the topic Offline Data Sync in Azure Mobile Apps.

オフライン同期をサポートするようにアプリケーションを更新するUpdate the app to support offline sync

オフライン同期では、同期テーブルに対して読み取りと書き込みを行います (IMobileServiceSyncTable インターフェイスを使用)。このテーブルは、デバイス上の SQLite データベースの一部です。With offline sync, you read to and write from a sync table (using the IMobileServiceSyncTable interface), which is part of a SQLite database on your device.

デバイスと Azure Mobile Services の間で変更をプッシュしたりプルしたりするには、同期コンテキスト (MobileServiceClient.SyncContext) を使用します。この同期コンテキストは、データをローカルに格納するローカル データベースで初期化されます。To push and pull changes between the device and Azure Mobile Services, you use a synchronization context (MobileServiceClient.SyncContext), which you initialize with the local database to store data locally.

  1. TodoActivity.java で、mToDoTable の既存の定義をコメント アウトし、同期テーブルのバージョンをコメント解除します。In TodoActivity.java, comment out the existing definition of mToDoTable and uncomment the sync table version:

     private MobileServiceSyncTable<ToDoItem> mToDoTable;
    
  2. onCreate メソッドで、mToDoTable の既存の初期化をコメント アウトし、次の定義をコメント解除します。In the onCreate method, comment out the existing initialization of mToDoTable and uncomment this definition:

     mToDoTable = mClient.getSyncTable("ToDoItem", ToDoItem.class);
    
  3. refreshItemsFromTable で、results の定義をコメント アウトし、次の定義をコメント解除します。In refreshItemsFromTable comment out the definition of results and uncomment this definition:

     // Offline Sync
     final List<ToDoItem> results = refreshItemsFromMobileServiceTableSyncTable();
    
  4. refreshItemsFromMobileServiceTableの定義をコメント アウトします。Comment out the definition of refreshItemsFromMobileServiceTable.

  5. refreshItemsFromMobileServiceTableSyncTableの定義をコメント解除します。Uncomment the definition of refreshItemsFromMobileServiceTableSyncTable:

     private List<ToDoItem> refreshItemsFromMobileServiceTableSyncTable() throws ExecutionException, InterruptedException {
         //sync the data
         sync().get();
         Query query = QueryOperations.field("complete").
                 eq(val(false));
         return mToDoTable.read(query).get();
     }
    
  6. syncの定義をコメント解除します。Uncomment the definition of sync:

     private AsyncTask<Void, Void, Void> sync() {
         AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){
             @Override
             protected Void doInBackground(Void... params) {
                 try {
                     MobileServiceSyncContext syncContext = mClient.getSyncContext();
                     syncContext.push().get();
                     mToDoTable.pull(null).get();
                 } catch (final Exception e) {
                     createAndShowDialogFromTask(e, "Error");
                 }
                 return null;
             }
         };
         return runAsyncTask(task);
     }
    

アプリケーションをテストするTest the app

このセクションでは、WiFi をオンにした状態で動作をテストした後、WiFi をオフにしてオフライン状態にするシナリオを使用します。In this section, you test the behavior with WiFi on, and then turn off WiFi to create an offline scenario.

データ項目を追加したときに、これらの項目はローカルの SQLite ストアに保持されていますが、 [更新] ボタンをクリックするまでモバイル サービスと同期されません。When you add data items, they are held in the local SQLite store, but not synced to the mobile service until you press the Refresh button. 他のアプリでは、データを同期させるタイミングに関する要件が異なる場合がありますが、このチュートリアルではデモの目的で、ユーザーが明示的にデータ同期を要求したことにします。Other apps may have different requirements regarding when data needs to be synchronized, but for demo purposes this tutorial has the user explicitly request it.

そのボタンを押すと、新しいバックグラウンド タスクが開始されます。When you press that button, a new background task starts. タスクは、ローカル ストアに加えられたすべての変更を同期コンテキストを使用してプッシュした後、変更済みのすべてのデータを Azure からローカル テーブルにプルします。It first pushes all changes made to the local store using synchronization context, then pulls all changed data from Azure to the local table.

オフライン テストOffline testing

  1. デバイスまたはシミュレーターを [ 機内モード] に切り替えます。Place the device or simulator in Airplane Mode. これでオフラインのシナリオが準備できます。This creates an offline scenario.

  2. ToDo 項目をいくつか追加するか、一部の項目を完了済みとしてマークします。Add some ToDo items, or mark some items as complete. デバイスまたはシミュレーターを終了して (またはアプリケーションを強制的に閉じて)、再起動します。Quit the device or simulator (or forcibly close the app) and restart. 変更はローカルの SQLite ストアに保持されているため、変更がデバイスに保存されたことを確認します。Verify that your changes have been persisted on the device because they are held in the local SQLite store.

  3. SQL Server Management Studio などの SQL ツール、または FiddlerPostman などの REST クライアントを使用して、Azure TodoItem テーブルの内容を表示します。View the contents of the Azure TodoItem table either with a SQL tool such as SQL Server Management Studio, or a REST client such as Fiddler or Postman. 新しい項目が、サーバーと同期されていないことを確認します。Verify that the new items have not been synced to the server

    + <span data-ttu-id="d3452-141">Node.js バックエンドの場合は、[Azure Portal](https://portal.azure.com/)に移動し、Mobile App バックエンドで **[簡易テーブル]**  >  **、[TodoItem]** をクリックして、`TodoItem` テーブルの内容を表示します。</span><span class="sxs-lookup"><span data-stu-id="d3452-141">For a Node.js backend, go to the [Azure portal](https://portal.azure.com/), and in your Mobile App backend click **Easy Tables** > **TodoItem** to view the contents of the `TodoItem` table.</span></span>
    + <span data-ttu-id="d3452-142">.NET バックエンドの場合は、*SQL Server Management Studio* などの SQL ツール、または *Fiddler* や *Postman* などの REST クライアントを使用して、テーブルの内容を表示します。</span><span class="sxs-lookup"><span data-stu-id="d3452-142">For a .NET backend, view the table contents either with a SQL tool such as *SQL Server Management Studio*, or a REST client such as *Fiddler* or *Postman*.</span></span>
    
  4. デバイスまたはシミュレーターの WiFi を有効にします。Turn on WiFi in the device or simulator. 次に [更新] ボタンを押します。Next, press the Refresh button.

  5. Azure ポータルで、もう一度 TodoItem のデータを参照します。View the TodoItem data again in the Azure portal. 新しく変更した TodoItems が表示されます。The new and changed TodoItems should now appear.

その他のリソースAdditional Resources