Android アプリから、GAE 開発サーバーのアカウントを利用する

と、Android 端末のGoogle アカウントを用いて、GAEアプリケーションを利用する準備を徐々に進めてきていたのだが、GAEの開発環境でのやり方が分からなかったため、とりあえず実際にアプリケーションをリリースして試していた。

が、何とかいける方法が見つかったので、メモ。

通常PCから、GAEのアプリケーションをログインしないと使えないようにすると、以下の様なログイン画面にナビゲートされる。

gae_auth04 

ただ、Android 端末ではGoogle アカウントを管理しているので、アプリケーションがログインを必要とするGAEアプリケーションを利用する場合、以下の様な画面を表示させて、事前に認証を行っておくことが出来る。その手順は、前回実現した。

android_gae03

が、同じ手順で、ホスト名のみ、開発用のGAE の Webサーバーにしてもそのままでは動作しない。

まぁあくまで開発環境なので、認証周りまで完全にエミュレート出来ているわけでは無いのだろう。

開発用のサーバーでは、以下の様なログイン画面が表示され、何でもいいのでメールアドレスを入力してログインすると、目的のアプリケーションに遷移するようになっている。

gae_auth02

ということは、まぁ Cookie になにがしかの値を埋め込んでいるのだろうと言うことで、Firebug でのぞいてみると・・・

gae_auth01

こんなエントリーが。なんか、後半の数値の部分は動的に生成しているのかな?と思って、検索してみると数件そのままの値がヒット。

dev_appserver_login=test@example.com:False:185804764220139124118

なんか、固定値みたいなので、そのまま Cookie にセットして送信するコードを書いて、、、

String uri   = null;
String acsid = null;
HttpGet httpGet = null;
HttpResponse response = null;
if (Debug.isDebuggerConnected()) {
    // デバッグ時のコード
    uri   = "http://192.168.10.119:8080/cardroid";
    acsid = "dev_appserver_login=\"test@example.com:False:185804764220139124118\"";
} else {
    // リリース時のコード以下参照
    // http://typea.info/blg/glob/2010/08/android-google-gae.html 
}
HttpPost httpPost = new HttpPost(uri);
httpPost.setHeader("Cookie", acsid);

response = client.execute(httpPost);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    String l = null;
    while((l = reader.readLine()) != null) {
    Log.i("MyApp",l);
}

実行してみると、めでたく、ログイン状態となったようだ。

gae_auth03

これで、開発環境で、GAEアプリをテスト出来そうだ。

 

以上。