2012年10月1日月曜日

「Google Play services」のOAuth2認証に依存したAndroidアプリを書くとエミュレーターでデバッグできなくなるのではないか?

追記12.11.19:少なくとも、先日リリースされたGoogle APIs API Level 17エミュならデバッグできることがわかった。
琴線探査: Android 4.2のエミュレーターには予め「Google Play開発者サービス」がインストールされている!
----

先日Android DevブログでOAuth2関連の気になる記事が出ていた。

琴線探査: AndroidのOAuth2関連で要注意な記事「Google Play services and OAuth Identity Tools」

ひとまず下記を参考に、サンプルを動かしてみることにした。

Google+ Platform for Mobile — Google Developers

Eclipseで「Window」>「Android SDK Manager」を開く。

「Extras」>「Google Play Services」をチェックして「Install Packages」。


「File」>「Import」>「Existing Android Code Into Workspace」からの「Next」。

「Browse」で$ANDROID_SDK_HOME/extras/google/google_play_services/samples/plusを「開く」。

「Copy projects into Workspace」をチェックして「Finish」。

インポートされた「com.google.android.gms.samples.plus.MainActivity」プロジェクトを右クリックして「Properties」。

「Java Build Path」>「Libraries」>「Add External Jars」。

$ANDROID_SDK_HOME/extras/google/google_play_services/libs/google_play_services.jarを選択して「開く」。

もう一回「Add External Jars」。

$ANDROID_SDK_HOME/extras/android/support/v4/android-support-v4.jarを選択して「開く」。(これを選択するには「Android Support Library」がインストールされていなければならない)

「Order and Export」タブ>google_play_services.jarとandroid-support-v4.jarをチェック。「OK」で閉じる。

「Run」>「Debug」。

アプリが起動し次第「Sign in」をクリック。するとこのようなダイアログが表示される。


ここで「Get Services」をクリックするとエラー(ノ∀`)

LogCatを見ると。。。

10-01 15:56:03.510: E/SettingsRedirect(664): Can't redirect to app settings for Google Play Services
10-01 15:56:03.520: E/SignInActivity(664): Unable to install Google Play services.

と出ていた。

エミュのAPI Levelによるのかも?と思って、「Google APIs」系のエミュでAPI Level 10(Gingerbread)、15(ICS)、16(JellyBean)で試したが、どれも同じエラーで終了。

ただし、JellyBeanではダイアログのメッセージがこのように違っていた。


そこで、Gingerbreadの実機で起動してみる。すると、エミュで起動した時とは違うダイアログが表示される。


ここで「Play開発者サービスを入手」をクリックしたら、Google Playの「Google Play開発者サービス」というアプリのページに飛ばされてインストールするように促される。ちなみに、ユーザーコメントでは「勝手に入れるな」とか「スパイウェアか?」的な話が散見された(^^);


ここで「インストール」してバックボタンでアプリの初期画面まで戻り、再び「Sign in」をクリックするとこのようにGoogle+のボタンが表示される。


ここで「Sign in」ボタンをクリックするとアカウント選択画面になる。


これはGingerbreadのシステムのアカウント選択画面とは微妙に違う。Intentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。

アカウントを選択して「OK」するとアクセス許可の画面になる。これもGingerbreadのアクセス許可画面とは明らかに違う。


GingerbreadでOAuth2認証した場合、複数のサービスの許可を一度に得ることはできず、サービス名はURLで表示されるから。

この画面もIntentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。この部分は確かに改善されたと言える。

ここで「許可」すると、このように「Signed in.」となる。


つまり何が言いたいかというと、「Google Play services」のOAuth2認証に依存したアプリを書くとエミュレーターでデバッグできなくなるのではないか?ということ。

エミュには「Google Play開発者サービス」をダウンロードするための「Playストア」が無いので、そのためだと思われる。

追記12.10.04:がんばってみたけど、やっぱりダメだった_| ̄|○
琴線探査: 「Google Play Store」をエミュレーターにインストールできるか?

しかし、これではあまりにも不便。Google APIに依存する必要があるためにx86エミュが使えないばかりか、エミュそのものまでも使えなくなるなんて。

何とかエミュでも動作させる方法は無いのだろうか・・・もしあるなら、誰か教えてください・・・