2011年5月23日月曜日

Android + App Engine: A Developer's Dream Combination を試してみた。

Google IO 2011 の Session ビデオはこちら

最初にスピーカーが、なぜこのプロジェクトを始めたのかを語っているのですが、
「約1年まえ、Google に入ったくらいの頃、すごく Android が好きだったんだよね。(省略)ただ、1つだけがっかりしたことがあって、Android のアプリのゲームであるレベルまでいっても、ほかの端末でそのレベルの続きから始められないんだよね。だから、この良くないユーザー体験を良くするために、何かできることがないかって何人かで話てたんだよね。」

なるほど、家では大きな画面のタブレットで、通勤・通学中はスマホで続きを、というスタイルは自然ですよね。もちろんゲームだけじゃなくて、普通のアプリでも十分データを共有/シンクすることの利点があります。セッションでは、例として ToDo 管理アプリ(CloudTask という名前)を作っていくデモがあります。
# ログイン名に LarryPage を使ってるのがシャレてるねw

でも、「Android 開発者にとって、Google App Engine と組み合わせるのって簡単じゃないよね?」

ということで、Google IO の当日から

 「Google Plugin for Eclipse (GPE) 2.4 Beta がダウンロードできるようになりました。」

 GPE 2.4 Beta には以下の機能が!すばらしい!
  ・ Android Application のサポート
  ・ RPC Tooling のサポート (Android -> GAE)
  ・シームレスな C2DM のサポート (GAE -> Android)
 

■ さっそくやってみた。

 1. GPE 2.4 Beta についてはここ

  Eclipse plugin で指定する update site URL が通常とは違って beta が含まれます

  Eclipse 3.6 (Helios)
  http://dl.google.com/eclipse/plugin/beta/3.6

  Eclipse 3.5 (Galileo)
  http://dl.google.com/eclipse/plugin/beta/3.5

  Eclipse 3.4 (Ganymede)
  http://dl.google.com/eclipse/plugin/beta/3.4

  Eclipse で [Help] -> [Install New Software...] で上記のリンクを指定



  GWT の SDK は最新のβ版の 2.4.0.beta, GAE は 1.5.0 が入りました。
  Android SDK, ADT は別途入れる必要があります。

 2. プロジェクトを作成

  ・[File] -> [New] -> [Project...] -> [Google] -> [App Engine Connected Android Project]



  ・Project name: と Package name: を追加
  (Android SDK, GAE SDK, GWT SDK が正しく設定されていない場合は、ここから設定できる)

  ・C2DM のアカウントを設定
  (まだ C2DM に sign up してない場合は、ここから sing up page へいける)



  完了したら、Android のプロジェクトと、GAE + GWT のプロジェクトが作られます。



  ざっと中をみると、
   Android のプロジェクトには
    ・RequestFactory のライブラリ(requestFactory-client.jar)
    ・C2DM のライブラリ (c2dm.jar)
    ・認証 (validation) のライブラリ (validation-api-1.0.0.GA.jar)
    ・いくつかの Activity とその他のクラス (src/***/)
    ・shared で GAE + GWT の方の shared package を参照 (share/)

   GAE + GWT のプロジェクトには
    ・JSON のライブラリ (json-1.5.jar)
    ・C2DM のライブラリ(c2dm-server.jar)
    ・認証 (validation) のライブラリ (validation-api-1.0.0.GA.jar, validation-api-1.0.0.GA-sources.jar)
    ・UI Binder を使った入り口ページ用レイアウト(src/***.client/***Widget.ui.xml)
    ・サーバー側実装 (src/***.server/)
    ・Android のプロジェクトから参照される shared package (shared/)

  などが含まれています。



  最初から、RPC や C2DM のロジックが含まれた状態のプロジェクトが作られるので、そのまま動かして、RPC や C2DM がどう動くか確かめることができます。すごいね。

  まず、Android アプリを [Debug As] -> [Local App Engine Connected Android Application] で実行します。
  通常の Android Application 実行ではないので注意!



  そうすると、App Engine 側も立ち上がって、こんな感じに、
  GWTのローカルのアクセス用URLが表示されるので、ダブルクリックしてブラウザで開きます。


  動かすと、Android アプリはこんな画面
  (注意:Android エミュレータでC2DMのテストをするには、Google アカウントの設定が必要なので、AVD の Target Name には Google APIs (Google Inc.) を指定してください)



  まず、C2DMにアカウントを設定します。
  メニューの Accounts をタップすると、端末に設定されているアカウントの一覧がでます。



  C2DMに設定するアカウントを選択して Connect を押すと



  このアプリで Google Account を使うけどいいですか?という画面がでるので、Allow をタップします。



  しばらくして認証が完了すると、Notification Bar に register できましたというメッセージがでます。



  認証に成功したら、Android アプリから SayHello ボタンを押すと、GAE に RPC でリクエストを投げた返事が表示されるようになります。やった!




  同じことが、GWT クライアントからもできます。
  次に、GWTのページを開くと、最初にログイン用のページが表示されるので、Sign Up for Android Cloud to Device Messaging で指定したアカウントでログインします。



  ブラウザに Plugin が入ってない場合は、入れるように表示がでるので、それに従って入れます。


  
  ログインすると、こんなページ
  


  SAY HELLO ボタンを押すと、GAE に RPC でリクエストして、その返事が表示されます。



 
  いよいよ、メインイベントのC2DM!
  フォームにメッセージをいれて SEND MESSAGE をクリック。



  きたー。


  うまく送れないときは、GWT 側で最初にログインしたアカウントがちゃんと
  Sign Up for Android Cloud to Device Messaging
  で登録したアドレスかどうか確認すること。
  別のアカウントで AuthToken がすでにできてしまっている場合は、ログアウトしてから
  http://127.0.0.1:8888/_ah/admin/
  にいって、C2DMConfig の Entities を削除してから正しいアカウントログインしたほうが安全。


  ローカルのエミュレータと、ローカルデバッグモードの GAE でちゃんとC2DM動くんだね。すごーい。



   

1 件のコメント: