最初にスピーカーが、なぜこのプロジェクトを始めたのかを語っているのですが、
「約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...] で上記のリンクを指定
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhREYH6APExxfbBOAPg5WWM1jetgR6P0NwMsvrjZfp1M5aEi4UZDZ94espG-eBiGeABy-iglUizvuFpt8IVorRtPLn-KTAq_JQadAcix9SAfQpxXoWhg3Osqfk0C7NLaqnD6UuefFmihlg/s280/GPE_Beta.png)
GWT の SDK は最新のβ版の 2.4.0.beta, GAE は 1.5.0 が入りました。
Android SDK, ADT は別途入れる必要があります。
2. プロジェクトを作成
・[File] -> [New] -> [Project...] -> [Google] -> [App Engine Connected Android Project]
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh44N9PuIFew_-eXq2asKds4BnAEB30k9UWW_wgjOopP_isHh6c9jZUky21DAmAbJoDaz_FpFP7iP7OojDWtzsiuQvvnJK4S-fw3xetX6lb4E6Wx3hR-h6h5WxtE1ZpyuMAP1OUtBN0Pi4/s280/GET_Beta2.png)
・Project name: と Package name: を追加
(Android SDK, GAE SDK, GWT SDK が正しく設定されていない場合は、ここから設定できる)
・C2DM のアカウントを設定
(まだ C2DM に sign up してない場合は、ここから sing up page へいける)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidzVEfwgXuiR0JKE8-p9zEFOlsaBMpPTNDT0VX3V3rMOuIQbWRE_6ksoUBbD6yGvpZGvO1Hd7mLnC_x6Rb2EkpQWOkb0ZJqmC1_MnGwikF9c8DieowImzg78UV25emKgpa-LQB7zXuefM/s280/GAE_Beta3.png)
完了したら、Android のプロジェクトと、GAE + GWT のプロジェクトが作られます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzp37NWVu0VNfKdocloDFjnxjBXdZ7TQzsgK0U2YALSQVnAH_C5Sfj_52p7EosWIYOnrtSAaiND1sO2ZcenMaWGvyoefk273sfOoWE4nQKlcVbo4EZSGjHlHadhBwf_XbwM_sElSsSifk/s280/GAE_Beta4.png)
ざっと中をみると、
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/)
などが含まれています。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ1_ZhY11tcYanu8-L-IYvJcyfpL09NizeZRSy_6ulqsyNakOAMPS0NGqRLhw4GuBkr79iRY-5SNyi2ADLQPQXhhLJGGyybvXOT7rAjt4fAvz6GtWcQ16vg4Pd2YEegEAIk4DzHr_eWIk/s400/GAE_Beta5.png)
最初から、RPC や C2DM のロジックが含まれた状態のプロジェクトが作られるので、そのまま動かして、RPC や C2DM がどう動くか確かめることができます。すごいね。
まず、Android アプリを [Debug As] -> [Local App Engine Connected Android Application] で実行します。
通常の Android Application 実行ではないので注意!
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhydRTVQ0i8vymjahAXDnBJhHCESm7vDbnOXiM3ywj8ZLwyTdG5I-gF6wBtKtZ1t6bYK5k8zNkjTcfnjqqy5rX1YluRISgaD9szCsAgJl3SOSYCOXfcthCfGwri67KhopARw91P-7z7sG0/s280/GAE_Beta9.png)
そうすると、App Engine 側も立ち上がって、こんな感じに、
GWTのローカルのアクセス用URLが表示されるので、ダブルクリックしてブラウザで開きます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEC-Kbu7kRQpB8m2fpvlurqvNdOWpVcpJ4ALe9hsDfha7j82r3roJ3QqkM8fF1R3zvmvZYHz6P2bC6iHFIFssxcSCPqKxyE6pKY9M8oOhrP-dqTgwfDUwAdrLpcYU4bFvPgyfZWeplc_c/s280/GAE_Beta6.png)
動かすと、Android アプリはこんな画面
(注意:Android エミュレータでC2DMのテストをするには、Google アカウントの設定が必要なので、AVD の Target Name には Google APIs (Google Inc.) を指定してください)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA1ZAkjQR87594UmHBy5a8sdi82Kaflup9BV6piMTXnZbJEa3GGdSui4qtaOY-2iFrr90oEf2n1C9vSqPdVO1CLJJyvedfIesbFv8djPRK71hdr_95CwR-ErcvhVEsAf_rVPlHePp1S6I/s400/CloudTask1.png)
まず、C2DMにアカウントを設定します。
メニューの Accounts をタップすると、端末に設定されているアカウントの一覧がでます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO7HFIOFTQU02Jm6GUjYqUF5O0QLVkMa6bGhK07VPlmgXUxoXYbTOY3T4yv6_tQaZeW4gzKpr7GpXNoUPJ52_9CNBx1l7NwdXpFVOhAkr8RTEcQW3GrekVDuMAum4sujBX997OkSKHgFw/s400/CloudTask2.png)
C2DMに設定するアカウントを選択して Connect を押すと
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn-z3YjnxAw3jV5cgghqISwHVAtJCqCQguDA-aIwtcEeUQBQO0MWcxGdiUglApWKgcq_h0gmOql0Fy2CoEpNOqn5mXM_30UKSTqoxRNei1QvQMx-_mobtOSsImTUbiat_qqwOYpWn1nu4/s400/CloudTask3.png)
このアプリで Google Account を使うけどいいですか?という画面がでるので、Allow をタップします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit-YbnNOKz7cXSgkF_GDpIX73jnHKiRhrN6E-7Ub6D91BpLbCFeJPQ1Inn85Vwf5SE8jAoQyxEbsNr-P43CUR8N7mUDgNxi0aMtz6uPSabx0hnGVP9CL6RIFehESDwxlJcGe2X3kDUTmU/s400/CloudTask4.png)
しばらくして認証が完了すると、Notification Bar に register できましたというメッセージがでます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtjznoTW_11JBe97zdTZb-jn_FZPbEKOWBaRvm_qCKBgW2HSMOdGldalVuwqpTLJv18YBF0SmTDaYWUGffs-NvInBjziSmjuciyKX1cjN0K1DllSNHIyNfAxoQIhcQ2IWMkpooMVHwk0A/s400/CloudTask6.png)
認証に成功したら、Android アプリから SayHello ボタンを押すと、GAE に RPC でリクエストを投げた返事が表示されるようになります。やった!
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLE_XqemJyBSTzIMgxbUZ4ZaKgupqQ4HDBkmpV72D8_EGawh2gdmRBVImUYHPpKlgrRWiVnpHvP5TLuPv-TTFEhVqYDJnKnGHYzu1x6J5QXZuXMNjyxJKjMnr0gr8LUJGOn1Eic2bwQlE/s400/CloudTask7.png)
同じことが、GWT クライアントからもできます。
次に、GWTのページを開くと、最初にログイン用のページが表示されるので、Sign Up for Android Cloud to Device Messaging で指定したアカウントでログインします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix5sm-U-uXv-WscvlsFR4npAOf2u_HzwElpfDR5Sz14PtrKO8p0vlDNZsipfifQrbN1dTLHoXPqfFOixTNo__pivAYiTyd1jzQ_O_ohNvMFRb6q0_wtG31x-3ONsBXs98v7ZHxC6B_Txc/s280/GAE_Beta8.png)
ブラウザに Plugin が入ってない場合は、入れるように表示がでるので、それに従って入れます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9kod9aScDFnRJWRWRAQoA3q1dl4c4spsLtETBRDURMBJTrd8lz8Hbaoo2-P_ikWUpE2o5JX9ZnNoCONQAuK66r6rLNC69HWI-jlYlmoD00-ta81GxJTCcdiS7ExQiXwxJU1aQSyX9uPw/s280/GAE_Beta7.png)
ログインすると、こんなページ
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRQMfzMNKDvyDZU0G0s_EmZq-5rT6PyKHnQNni7vQC88NRbPwZ3YoYsfGHQAB_fmqqBi-frzniT9ruyp4vQc0XI0LWLw6mak2Vf2yUO2Md_u3zDbAl2gyQ00CxXGKw4Ny84KQFn953RqA/s280/CloudTask_GWT1.png)
SAY HELLO ボタンを押すと、GAE に RPC でリクエストして、その返事が表示されます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGn9F_90WJ7iXDlUE3Tq6wgdlMiYoK70QNuAReOp1P4a-nRXohChgZaeG_0dxDG2mt0LRwLA5XtP3EuXP49IP5z3xt1tnC-RoTJhOcxBv4yuvjjFAxc1LnBRKRxzfyGHSRAvoryOAroJY/s280/CloudTask_GWT2.png)
いよいよ、メインイベントのC2DM!
フォームにメッセージをいれて SEND MESSAGE をクリック。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAi0FI7IK1ACCPiAaIVygIiL2u5JOvjffxBhMMHEI89GuXCV4e3pN6I6bCvSIgI9SyiR7rm0uqzyafxP1ih7IwDkguBMY_zlWmFtoM6Yft0gxUVD_5w1Rn33uTiBeQdfydYIDYEWPmJm8/s280/CloudTask_GWT3.png)
きたー。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEir64H823zBRnHrjBOHi5qQOmk82uPwwjM3mZghu4XNYa8GG1vcZFsHRdcHcEsuzW8I8ec9JaeOCt_i1reTyiu6Y1x4YNGuYAC4g2h9ENnJyS6TMGVw6XX2os8VqTohyXTXbwqv_vNNfA4/s400/CloudTask11.png)
うまく送れないときは、GWT 側で最初にログインしたアカウントがちゃんと
Sign Up for Android Cloud to Device Messaging
で登録したアドレスかどうか確認すること。
別のアカウントで AuthToken がすでにできてしまっている場合は、ログアウトしてから
http://127.0.0.1:8888/_ah/admin/
にいって、C2DMConfig の Entities を削除してから正しいアカウントログインしたほうが安全。
ローカルのエミュレータと、ローカルデバッグモードの GAE でちゃんとC2DM動くんだね。すごーい。
このコメントは投稿者によって削除されました。
返信削除