Mobile Services のオフライン同期
このポストは、7 月 30 日に投稿した Offline Sync for Mobile Services の翻訳です。
最新のモバイル アプリを開発する際には、エンド ユーザーが必ずしもネットワークにアクセスできるわけではないという実態を考慮する必要があります。ネットワークにアクセスできない状況は、一時的なネットワーク障害の場合もあれば、モバイル アプリをよく使用する場所が接続の悪い遠隔エリアであるという場合もあります。
こうした実態を考慮したアプリの開発を容易にするために、Azure Mobile Services SDK では、バックエンド データとデバイス上のローカル データベースを同期する機能をプレビュー版として提供しています。この機能は JavaScript と .NET の両方のバックエンドで利用可能で、Windows ストア、Windows Phone (英語)、iOS (英語)、Xamarin iOS (英語)、Xamarin Android (英語) という複数のクライアントをサポートしています (将来的には、Android および HTML クライアントのサポートも追加される予定です)。
先日には Windows ユニバーサル アプリのオフライン サポート (英語) が公開されたため、共通のコードベースを使用して、Windows ストアと Windows Phone の両方で動作するオフライン対応アプリを作成することができるようになりました。
アプリがオフライン モードになっている場合でも、ユーザーはデータを作成および修正することができ、データはローカル ストアに保存されます。アプリがオンライン状態に戻ると、ローカルで行った変更が Mobile Services バックエンドと同期されます。この機能では、同じレコードがクライアントとバックエンドの両方で変更された場合の競合の検出もサポートしています。
既に Mobile Services を使用している場合は、アプリにオフライン サポートを簡単に追加できます。使用するには、ユニバーサル アプリのソリューションから、[Manage NuGet Packages for solution] をクリックします。[Include Prerelease] を選択し、WindowsAzure.MobileServices.SQLiteStore ( 英語 ) のパッケージを検索します。ユニバーサル アプリは、バージョン 1.0.0-alpha4 以降でサポートされています。パッケージを Windows ストアと Windows Phone の両方のプロジェクトにインストールします。
次に、Mobile Services に接続するために GetTable メソッドの代わりに GetSyncTable メソッドを使用します。
IMobileServiceSyncTable todoTable = App.MobileService.GetSyncTable(); // オフライン アクセス
次に、ローカルの同期ストアを設定します。このコードは、たとえば OnNavigatedTo などのイベント ハンドラーに含めることができます。独自の同期ストアを定義することも、提供された SQLite ベースの実装を使用することも可能です。
if (!App.MobileService.SyncContext.IsInitialized)
{
var store = new MobileServiceSQLiteStore("localsync.db");
store.DefineTable<TodoItem>();
await App.MobileService.SyncContext.
InitializeAsync(store, new MobileServiceSyncHandler());
}
これで、アプリの CRUD 操作に (IMobileServiceTable ではなく) IMobileServiceSyncTable が使用されるようになります。その結果、ローカル データベースへの変更が保存され、変更内容のログも記録されます。アプリの変更内容を Mobile Services と同期する準備ができたタイミングで、PushAsync および PullAsync メソッドを使用します。
await App.MobileService.SyncContext.PushAsync();
await todoTable.PullAsync();
上記のコードではユニバーサル アプリを対象としましたが、iOS (英語)、Xamarin iOS (英語)、Xamarin Android (英語) のアプリにも同じように簡単にオフライン同期サポートを追加することができます。
この機能の詳細については、以下のリソースをご確認ください。
- チュートリアル: オフライン データ同期の利用開始 (英語)、オフライン データ同期の競合処理 (英語)
- ブログ記事: オフライン サポートの詳細 (英語)、Azure Mobile Services iOS SDK でのオフライン同期のサポート (英語)
- 動画: Channel 9 ビデオ: Windows Store アプリのオフライン同期 (英語)
- サンプル: 保険代理店向けのエンドツーエンドのサンプル (英語)、iOS のオフライン対応 ToDo アプリのサンプル (英語)、フィールド エンジニア向けの完成版アプリ (英語)
Azure Mobile Services またはオフライン機能についてご質問がある場合は、Twitter アカウント (@lindydonna) 宛てに直接コメントをお寄せください。