AndroidアプリからGoogleアカウントでGoogleのサービスを扱う場合に必要な,AccountManagerとGoogleLoginServiceHelperの使い方についての話

AccountManagerとGoogleLoginServiceHelper

2011-03-07 MyTracksのライセンスについて記述

Androidアプリの場合,Googleアカウントを扱う時はIDとパスワードをユーザに入力してもらうのではなく,

  • OSが1.6以下の場合: GoogleLoginServiceHelper
  • OSが2.1以上の場合: AccountManager

を使ってその端末に紐付いているアカウント情報を使って動作するというのが,スマートだと思います. この方法についての話題です.

★★ 2011/3/7追記 ★★
2011/2/22に追加されたMyTracksのREADMEファイル によると,mytracks以外でのgoogleloginclient-helper.jar等の使用はライセンス的に禁じられているようです. そのため,このページの内容は,実際には使用できないことになりますのでご注意ください

My Tracksのソースを入手する

このあたりの方法は,Apacheライセンスで公開されている MyTracksのソース に全て書かれています. 「Source」リンクを開くとソースのダウンロードの仕方が書いてありますので, Mercurialを用意してダウンロードすれば良いと思います

ソースの説明

My Tracksのソースを読めば全て解決なのですが,一応簡単な説明を試みます.

認証

基本的に,com.google.android.apps.mytracks.io パッケージ配下のAuthManager系クラスがキモになります.

com.google.android.apps.mytracks.io

ファイル名説明
AuthManagerFactory.javaOSのバージョンに合ったAuthManager実装クラスを返却するファクトリクラス.versionが7(OS 2.1)以上かどうかをチェック
AuthManager.javaAuthManagerのインタフェイスです
AuthManagerOld.javaAndroid OS 2.0.1以下向けのAuthManager実装クラス.GoogleLoginServiceHelperを使う
ModernAuthManager.javaOS 2.1以上向けのAuthManager実装クラス.AccountManagerを使う.マルチアカウント対応

com.google.android.apps.mytracks

ファイル名説明
AccountChooser.javaOS 2.1以上で端末に複数アカウントが設定されている時に1つを選択させるための機能

これらのクラスの実装の真似をすれば良いと思います. あとは,認証の結果は非同期で返ってくるようですので, それを受ける処理を自分のアプリに追加する必要があります.

MyTracksでいうと, com.google.android.apps.mytracks.MyTracks クラスのonActivityResultに実装されています.

MyTracks.java

@Override
public void onActivityResult(int requestCode, int resultCode,
    final Intent results) {
  switch (requestCode) {
   ・・・
    case MyTracksConstants.GET_LOGIN: {
      if (resultCode == RESULT_OK && auth != null) {
        if (!auth.authResult(resultCode, results)) {
          dismissDialogSafely(DIALOG_PROGRESS);
        }
      } else {
        dismissDialogSafely(DIALOG_PROGRESS);
      }
      break;
    }
    ・・・
  }
}
RESULT_OKであれば,AuthManager#authResultメソッドで結果を設定しています.
auth.authResult(resultCode, results)
結果の設定というのは,AuthManager実装クラスのソースを見ればわかりますが
[AuthManagerOld]
authToken = results.getStringExtra(GoogleLoginServiceConstants.AUTHTOKEN_KEY);

[ModernAuthManager]
authToken = results.getStringExtra(AccountManager.KEY_AUTHTOKEN);
という感じで,どちらにせよ結果のIntentから取得した文字列データを,authTokenとしてインスタンス内に保存しています.

認証処理としては,このauthTokenを取得できれば完了となります.

MyTracksの場合は,MyTracksクラスのメンバ

private AuthManager auth;
が,authTokenを持っているという状態です.

Googleサービスの利用

MyTracksでは,このauthTokenを使って マイマップのAPI にアクセスしています.

具体的な使われ方は,

com.google.android.apps.mytracks.io.SendToMyMaps
クラス内の,auth使用箇所が参考になると思います.

ただし,このマイマップAPIは 2011年1月31日で 廃止される らしいので注意してください.

英語版のデベロッパーガイド には「Deprecated」と書かれているのですが, 日本語版のデベロッパーガイド には特に記載が無いので,困ったものです.

依存ライブラリ

これらの処理を動かすためには,MyTracksに同梱されている以下のライブラリが必要です.
ファイル名説明
google-common.jar共通
accounts.jarModernAuthManagerが使用
googleloginclient-helper.jarAuthManagerOldが使用
kamolandをフォローしましょう


© 2019 KMIソフトウェア