2011年9月28日水曜日

Google アカウントを使用して Google App Engine の認証を行う

AccountManager から、端末に登録されているGoogleアカウントを取得して、
そのアカウントでGoogle App Engineの認証を行う簡単なサンプルです。


AndroidManifest.xmlは、次のパーミッションを指定します。

  • android.permission.GET_ACCOUNTS
  • android.permission.MANAGE_ACCOUNTS
  • android.permission.USE_CREDENTIALS




Activity


AccountManagerから、AccountsByTypeに"com.google"を指定して、Googleアカウントの一覧を取得します。
それをリスト表示してます。
※リストは簡易的に標準のレイアウトを使用してます。

public class AccountList extends ListActivity { protected AccountManager accountManager; protected Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accountManager = AccountManager.get(getApplicationContext()); Account[] accounts = accountManager.getAccountsByType("com.google"); this.setListAdapter(new ArrayAdapter( this, android.R.layout.simple_list_item_1, accounts)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Account account = (Account)getListView().getItemAtPosition(position); AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, "ah", null, this, null, null); Bundle authTokenBundle; try { authTokenBundle = accountManagerFuture.getResult(); String authToken = authTokenBundle.get( AccountManager.KEY_AUTHTOKEN).toString(); Log.i(TAG,"authToken:"+authToken); } catch (OperationCanceledException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (AuthenticatorException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
リストで選んだAccountでGoogle App Engineの認証を行ってます。
AccountManager#getAuthToken() の 第2引数に AuthTokenTypeを指定します。
"ah"がGoogle App EngineのAuthTokenTypeとなってます。

AuthTokenTypeについては、次のサイトが参考になると思います。
  Account Managerについて - adsaria mood
  Google Data APIs Frequently Asked Questions - Google Base Data API - Google Code

認証画面が表示されます。

ユーザがAllowを選択するとauthTokenを取得することができます。


0 件のコメント:

コメントを投稿