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

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 マネージメントポータルを開きます。迷ったらここ。アドレスは、

です。

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

using azure mobile service by xamarin 1 01

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

using azure mobile service by xamarin 1 02

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

using azure mobile service by xamarin 1 03

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

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

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

using azure mobile service by xamarin 1 04

ここから、一気です。

  1. まずプラットフォームで「Xamarin」を選択し、
  2. 「新しい XAMARIN アプリケーションを作成する」を展開、
  3. 「TodoItem テーブルを作成する」をクリックして「作成されました」となるまで待ち、
  4. Xamarin.iOS 用のサンプルアプリケーションをダウンロードします。

using azure mobile service by xamarin 1 05

ダウンロードした zip ファイルを解答し、Xamarin Studio で開きます。 参照 や Components を見ると、Azure Mobile Service 用のライブラリが組み込まれている事が分かります。

using azure mobile service by xamarin 1 06

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 モバイルサービスの続きで、このサンプルに認証周りの機能を実装してみます。