2011年9月28日水曜日

Android からApp EngineのフォームにPOSTする

「Google アカウントを使用して Google App Engine の認証を行う」の続きです。

Google App Engine のスタートガイドで作成しているゲストブックのフォームにポストするサンプルです。



以前のソースはActivityクラスにコードを記載してましたが、もう少し汎用的なクラスを作成しました。

GoogleServiceAuthenticator


  • コンストラクタにはContextを指定してます。
  • getGoogleAccounts() で、アカウントリストを取得できます。
  • execute()で、認証を実行してます。
    • 引数 accountには、リストから選ばられた一意のアカウントを指定します。typeは、Googleのアカウントタイプ(AppEngineの場合は"ah")。postExecuteCallbackには、認証終了後にコールしたいクラスを指定します。
    • AccountManagerのgetAuthTokenを呼び出します。
      • GetAuthTokenCallbackをcallbackに指定してます。
      • GetAuthTokenCallbackのrun()の認証処理の実態のgetAuthToken()を呼び出してます。
    • getAuthToken()では、認証処理を失敗時のリトライのためにループさせてます。
      • getLoginUrl()を呼び出して、アプリのUrlを作成。
        • https://yourappl.appspot.com/_ah/login?continue=http://localhost/&auth=[authToken]
        • authTokenは、AccountManagerから取得した文字列を指定してます。
      • urlを読んで、レスポンスを取得。
      • 取得したレスポンスが500の場合、AccountManagerのキャッシュからauthTokenを削除して、リトライをさせてます。
      • 認証に成功したら、Cookieから、ASCID または、SACSIDを取得します。
        • httpsで認証した場合は、SACSID、httpの場合は、ASCIDが取得できます。
    • その後、postExecuteCallbackを実行させてます。
      • postExecuteCallback内で、App Engineにアクセスするときに、Http Headerの CookieにASCID/SACSIDをセットする必要があります。


Activityの実装例

GoogleServiceAuthExampleActivity


フルプロジェクトはgithubに上げました。
http://github.com/granoeste/GoogleServiceAuthExample

0 件のコメント:

コメントを投稿