Edited at
XamarinDay 14

Xamarin で Windows Azure モバイルサービスを使う(その1)

More than 1 year has passed since last update.

Xamarin で BaaS を使うことについて、 koji_yusa さんkochizufan さん が、Parse の使用方法について書いてくれました。

BaaS の中では Parse が一番知名度が高いでしょう。しかし!Microsoft も BaaS を提供しています。

Azure の名を冠しているため、「どうせ IaaS でしょ」とスルーする人が多いんじゃないかと思うので、今回は Microsoft の BaaS である「Azure モバイルサービス」について書きます。


Azureモバイルサービス vs Parse

実際のところは、Parse に比べて Azure の方がスペックは低いです。無料版では、API呼び出し回数は、Azure が50万回に対して、Parse は100万回、ストレージは、Azyreが20MB(!)に対して Parse が1GB などです。

唯一、Azure にのみある機能は「スケジュールされたジョブ」、いわゆる cron みたいなジョブの定期呼び出し機能です。無料版では1時間に1回の利用に限定されるようですが、日時処理には十分使えるでしょう。

Nifty の BaaS と比べても劣勢ですね、あれれ?


Azure モバイルサービスを Xamarin から使う

Microsoft と Xamarin との提携により、Xamarin から Azure モバイルサービスは、簡単に利用することができます。提携前からライブラリの提供など対応は充実していましたが、提携により Microsoft のサイトでチュートリアルが公開されるなど、より充実しました。

そのチュートリアルを辿ってみます。

ちなみに環境は Mac + Xamarin Studio です。Win + Visual Studio でも同じ手順ですが、iOS 用のサンプルなので、iOS ならビルドと実行の為に Mac が必要です。Win しかないなら Android 用に置き換えて試せます。


1. Windows Azure にサインアップする

モバイルサービスを利用するには、まず Windows Azure に登録しなければなりません。本人確認のために、クレジットカードや携帯電話番号が必要になるのが煩わしいかもですが、勝手に請求されたりはしませんのでご安心を。

手順は↓が詳しいので割愛します。


2. モバイルサービスを作成する

サインアップできたら Windows Azure マネージメントポータルを開きます。迷ったらここ。アドレスは、

です。

下のような画面になるので、左メニューから モバイルサービス → 新しいモバイル サービスを作成する と進みます。

URL に任意のIDを入力します(世界で一意になる必要があります)。また、地域を「東アジア」にします。

続いて SQL Server の設定をします。ログイン名に任意のユーザー名、パスワードに任意のパスワードを設定します。

ウィザードを終わると、マネージメントポータルに戻ります。しばらくの「作製中…」の後、状態が「準備完了」となり、これでモバイルサービスは作成完了です。


3. Xamarin.iOS アプリケーションからモバイルサービスを使ってみる

作成したモバイルサービスをクリックします。

ここから、一気です。


  1. まずプラットフォームで「Xamarin」を選択し、

  2. 「新しい XAMARIN アプリケーションを作成する」を展開、

  3. 「TodoItem テーブルを作成する」をクリックして「作成されました」となるまで待ち、

  4. Xamarin.iOS 用のサンプルアプリケーションをダウンロードします。

ダウンロードした zip ファイルを解答し、Xamarin Studio で開きます。

参照 や Components を見ると、Azure Mobile Service 用のライブラリが組み込まれている事が分かります。

Debug で iPhone シミュレータで動かしてみます。

上の動画のように適当なアイテムを追加した後、ブラウザのマネージメントポータルで追加したデータを確認してみます。

上部のメニュー から データ → TodoItem と進むと、追加されたデータが確認できます。

以上です。Xamarin.iOS で Azure モバイルサービスにデータを登録するサンプルが手に入りました。


4. サンプルのコードを眺めてみる

これで終わってもアレなので、コードを見てみます。

まず前述した Azure Mobile Service 用のライブラリが組みこまれていますが、これは、 Xamarin の Components ストアで提供されている、

です。これを主に使っているのは QSTodoService.cs です。

QSTodoService.cs を見てみると、まず NameSpace から。

using Microsoft.WindowsAzure.MobileServices;

次にコンストラクタなど。

MobileServiceClient がメインクラスですが、これを使う前に CurrentPlatform.Init() が必要です(DI だか IoC だかですかね)。

そして MobileServiceClient.GetTable<ToDoItem>() をすることで Azure 上のテーブルを取得しています。まだデータは読み込みません。

MobileServiceClient client;

IMobileServiceTable<ToDoItem> todoTable;

/**省略*/

QSTodoService ()
{
CurrentPlatform.Init ();

// Initialize the Mobile Service client with your URL and key
client = new MobileServiceClient (applicationURL, applicationKey, this);

// Create an MSTable instance to allow us to work with the TodoItem table
todoTable = client.GetTable <ToDoItem> ();
}

データの読み込みは、RefreshDataAsync にて。さりげなく async で。

public List<ToDoItem> Items { get; private set;}

async public Task<List<ToDoItem>> RefreshDataAsync()
{
try {
// This code refreshes the entries in the list view by querying the TodoItems table.
// The query excludes completed TodoItems
Items = await todoTable
.Where (todoItem => todoItem.Complete == false).ToListAsync ();

} catch (MobileServiceInvalidOperationException e) {
Console.Error.WriteLine (@"ERROR {0}", e.Message);
return null;
}

return Items;
}

今回はこんなところで。

次回は、 Azure モバイルサービスの続きで、このサンプルに認証周りの機能を実装してみます。