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 アプリケーションからモバイルサービスを使ってみる
作成したモバイルサービスをクリックします。
ここから、一気です。
- まずプラットフォームで「Xamarin」を選択し、
- 「新しい XAMARIN アプリケーションを作成する」を展開、
- 「TodoItem テーブルを作成する」をクリックして「作成されました」となるまで待ち、
- 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 モバイルサービスの続きで、このサンプルに認証周りの機能を実装してみます。