Upload
takashi-egawa
View
915
Download
2
Embed Size (px)
Citation preview
GOOGLE PLAY SERVICES について
Smartium株式会社 江川 崇
GDG Shikoku #37 徳島テクニカルセッション
江川 崇(EGAWA Takashi)
Smartium株式会社 (http://smartiums.com ) 代表取締役
Google Developers Expert (https://developers.google.com/experts/ ) (株)カトマック・情報技術開発(株)・(株)トップゲート 技術顧問
Androidプログラミング入門 改訂2版
IMoNi、L10N twitter:@t_egg Google+:[email protected]
Google Android プログラミング入門改訂2版
江川崇、神原健一、山田暁通、 佐野徹郎、郷田まり子 共著
定価 :3,570円 (本体3,400円) 発売日:2012年8月31日 形態 :B5変 (448ページ) ISBN :978-4-04-886068-0
アスキー・メディアワークス 達人出版会からPDF版もあり
サンプルを全て詰めたアプリアリマス https://play.google.com/store/apps/details?id=jp.asciimw.androidbook
Remote TestKit
カトマックが提供するAndroid用リモートテスト環境 必要な端末を必要な時間だけ借りてリモートでテスト ADBが繋がる PCから画面の操作も可能
http://appkitbox.com/testkit
Google Play Serviceについてお話ししようかと思いましたが…
Google Play Services だけだとすぐ終わりそう
Google Play Services はGoogle APIのプラットフォーム
AndroidにおけるGoogle APIの活用全般のお話しします。
GOOGLE API の活用 FOR ANDROID
Smartium株式会社 江川 崇
GDG Shikoku #37 徳島テクニカルセッション
Agenda
GoogleアカウントとAndroid Android 互換/非互換 GoogleアカウントとAndroidデバイス
プログラムからのGoogleアカウントの活用 OAuth Google Plugin for Eclipse Google Cloud Endpoints
Androidクライアントでの利用 AccountManager Googl Playサービス
GOOGLEアカウントとANDROID
Android 互換/非互換
世の中の全てのAndroidデバイスは、必ず以下の2種類のいずれかに該当する。
Android互換(“Android compatible” である)
Android非互換(“Android compatible” ではない)
Android互換
Android Compatibility Programに従ったデバイス http://source.android.com/compatibility/index.html
Compatibility Definition Document (CDD)に沿って開発され、Compatibility Test Suite (CTS)を通過した端末 Compatibility Definition Document (CDD):仕様
Compatibility Test Suite (CTS):テスト
日本で買えるほぼ全てのスマフォやタブレットはAndroid互換
Android 非互換
Androidとして公式には認められないデバイス ※Compatibility Definition Document (CDD)に従っていな
いデバイス
Google系サービスアプリが利用できない
用途を限定したデバイスや安価なデバイスには増えつつある
ONKYO Internet Stick NT-A1 Covia FleadTab CTB-701
例)
Kindle Fire HD
Google アカウントとAndroidデバイス
多くのGoogleサービスを利用するために必要なID Android互換デバイスは、必ずひとつ以上の
Googleアカウントと紐づいていると見做してよい アカウントをアクティベートしないとGoogle Mapsも
Google Playも Gmailも使えない
Google Appsアカウント(独自ドメイン)も可能
Googleアカウント
Googleアカウントを軸に様々なサービスを利用可能
Androidは、Googleアカウントを使って様々なサービスを利用する入り口となる
アカウントの管理 アカウントへのアクセスリクエスト
アカウント認証情報はデバイスが持つ アプリ毎に認証情報を管理する必要が無い。 ユーザーも何度もIDとパスワードを入力する必要が無い。 アプリから認証済アカウントへのアクセスが容易。
プログラムからの GOOGLEアカウントの活用
Googleアカウントの利用
以前はClientLoginやAuthSubという仕組みを利用。ただし2012年の春にdeprecatedに。
参考) ClientLogin
https://developers.google.com/accounts/docs/AuthForInstalledApps
AuthSub https://developers.google.com/accounts/docs/AuthSub
現在はOAuth 2.0を使うようアナウンス有り
OAuthとは
WEBに公開しているデータやAPIに対するアクセスの認可を目的として標準化された通信仕様 OAuth RFC5849 OAuth2.0 RFC6749
他のプログラムから利用者のGoogleアカウントに紐づいているサービスやデータに対するアクセスを許したり拒否したりする仕組み
OAuthの主な長所
クライアント(コンシューマ)側に認証情報を残さない
全て許可/全て拒否ではなく、アクセス範囲(スコープ)の単位で扱える
一度許可したものを後から取り消せる
OAuth2.0/ OAuth1.0
OAuth2.0は、OAuth1.0の上位規格。 OAuth1.0は
WEBサービスアプリを前提としていた シーケンスが複雑で、リクエストの署名やリクエストトーク
ンが必須であるなど、使いにくい面があった。 特にJavaScriptなどのWEBアプリから
OAuth2.0は、OAuth1.0の簡略化を目指したもの。 シーケンスを簡単に
リクエストをHTTPSに限定することで、改ざんが無いことを担保するため、署名やトークンが必須ではない
デスクトップクライアントやJavaScriptからの利用も想定
Google Plugin for Eclipse
Googleの各サービスのAPIや、開発環境を手軽にダウンロード、セットアップできるEclipse Plugin
最近はADT(Android Development Tools) も含まれているので、Androidを使った開発や、Androidと他のGoogle APIとを組み合わせた開発でも便利に使える
https://developers.google.com/eclipse/
Googleライブラリのセットアップ
プロジェクトを右クリック ->Google->Add Google APIs…
Googleライブラリのセットアップ
必要なライブラリを選択
Googleライブラリのセットアップ
プロジェクトのビルドバスに追加される 依存関係のあるJARも含まれる
APIs Consoleでの設定
自作のWEB APIか、既にあるAPIかにかかわらず、OAuthを介してGoogleサービスを利用する場合、プロジェクトを作成し、コンシューマ側にキーを発行する必要がある。
ひとつのプロジェクトに対して20個のクライアントIDが発行できる。
APIs Consoleでの設定
Google APIs Console( https://code.google.com/apis/console ) からプロジェクトを作成
メニューの「API Access」 ->「Create OAuth 2.0 Client ID…」を選択
自作公開APIでの利用例 Google Cloud Endpoints
AppEngineをバックエンドとして使うクライアントアプリケーションの開発をより簡単にすることを目的として開発されているAppEngineの新機能 Google Plugin for Eclipseで開発可能 参考)Google I/O 2012でのコードラボ
http://tictactoe-codelab.appspot.com/
現状はまだ限定公開 Trusted Testers ( https://endpoints-trusted-
tester.appspot.com/ )に申請して利用する(ローカルサーバーで試すだけなら申請不要)
2012年末のAppEngineのアップデートで導入されるかも?と言う噂があったが、まだ正式公開されていない
Cloud Endpoints の主な機能
サーバー側APIクラスやコンフィグの生成
クライアントAPIライブラリの自動生成 JavaScript、Objective-C, Java
OAuthによるAPI認証の標準サポート
Cloud EndpointsでのAPI定義 (Java)
公開したいクラスやメソッドにアノテーションを宣言
@Api(name = "tictactoe")public class BoardEndpoint { @ApiMethod(name = "board.getmove", httpMethod = "POST") public Board getmove(Board board) { ・・・ } ・・・
Cloud EndpointsでのAPI定義 (Java)
通常は認証無しで呼べるが、OAuthをサポートする際もアノテーションで対応
@Api( name = "tictactoe", clientIds = {"xxxxx.apps.googleusercontent.com", "AndroidのClient ID"}, audiences = {”your_appid.appspot.com"}) ・・・
公開APIの確認
AppEngineにデプロイしたAPIは、API Explorerで確認できる
URL) https://developers.google.com/apis-explorer/?
base=https://your_appid.appspot.com/_ah/api
公開APIの確認
公開API群の一覧
公開APIの確認
APIが提供するエンドポイントの一覧
公開APIの確認
パラメータを指定してAPIの実行テスト
ANDROIDクライアントでの 利用
Androidクライアントからの利用例
AccountManagerからAuthトークンを取得
AccountManager am = AccountManager.get(this); Bundle options = new Bundle(); am.getAuthToken(myAccount_, mScope, options, this, new OnTokenAcquired(), new Handler(new OnError()));
Androidクライアントからの利用例
Authトークンが得られなかった時は認可画面へ
private class OnTokenAcquired implements AccountManagerCallback<Bundle> { @Override public void run(AccountManagerFuture<Bundle> result) { ... Intent launch = (Intent) result.get(AccountManager.KEY_INTENT); if (launch != null) { startActivityForResult(launch, 0); return; } } }
Androidクライアントからの利用例
リクエスト時はAuthトークンの他にクライアントID等も渡す
URL url = new URL("https://www.googleapis.com/・・・"); URLConnection conn = (HttpURLConnection) url.openConnection(); conn.addRequestProperty("client_id", your client id); conn.addRequestProperty("client_secret", your client secret); conn.setRequestProperty(“Authorization”, your auth token);
Google Playサービス
AndroidアプリとGoogleの各種サービスとの連携をさらに容易に行えるように拡張されたコンポーネント 現状は、従来のアプリからのGoogleアカウント認証機能
に加え、OAuth 2.0 を用いて、Google +サービスへの認可を行えるように拡張されたもの
Google Playサービス
各アプリケーションからライブラリを利用してGoogle Playサービスアプリと連携する
Android Maps v.2もGoogle Playサービス前提なので、今後はこの形態で提供されるAPIが増えそう。
Google Playサービスが入っているデバイス
Google Playサービスアプリは、2.2以上のデバイスが対象 Google Playアプリの最新版と同時にデバイスにインストー
ルされる
2.2以上のAndroid互換デバイスであれば、ほぼ例外無く使えると考えておいてよさそう
「Google Playサービス」というアプリが入っているかどうかで判断
Google Playサービスの使い方
現時点ではAndroid SDK Managerで、extras/Google Play services をインストールすると、
「[Android SDK]/extras/google/google_play_services」
の下に、ライブラリプロジェクトやサンプルプロジェクトがダウンロードされる
このライブラリプロジェクトをEclipseにインポートし、アプリのプロジェクトから参照する形で利用する
コード例
String authToken = null; try { authToken = GoogleAuthUtil.getToken(mActivity, [email protected], “oauth2:https://www.googleapis.com/auth/userinfo.profile”); } catch (GooglePlayServicesAvailabilityException playException) { // Google Play Servicesが使えないデバイスの場合 } catch (UserRecoverableAuthException userRecoverableException) { // トークンが得られなかった場合 // 認可画面へ遷移する mActivity.startActivityForResult(userRecoverableException.getIntent(), 1); } catch (GoogleAuthException fatalException) { // その他の例外 }・・・
認可画面の例
認可によってアクセス可能なスコープの例 自カウントに対するGoogle +APIによるア
クセス
oauth2:https://www.googleapis.com/auth/plus.me
まとめ
Googleは、様々なサービスを提供しており、それらをGoogleアカウント経由で利用できる
Google APIは、OAuth2を使って認証・認可する。独自のGoogle APIを作成する為の手段として、Google Cloud Endpointsなどが出てきている。
様々なGoogleサービスと連携するための土台として、Google Playサービスの導入、提供が開始されており、今後はGoogle PlayサービスによるAPIの提供が標準的な形態になると思われる
ご清聴ありがとうございました
EGAWA Takashi