Slide 1

Slide 1 text

New Google Sign-In API 2015/12/04 (Fri) shibuya.apk #5 @syarihu

Slide 2

Slide 2 text

GMO Media, Inc. Engineer - Android - Server Side Java @syarihu (しゃりふ)

Slide 3

Slide 3 text

では、さっそく

Slide 4

Slide 4 text

New Google Sign-In API

Slide 5

Slide 5 text

の前に

Slide 6

Slide 6 text

以前のGoogle Sign-Inの話から…

Slide 7

Slide 7 text

Previous Google Sign-In... - アカウント選択画面 ( AccountManager.newChooseAccountIntent ) - 自分でIntent投げて、 返ってきたらごにょごにょやって… - AuthTokenの取得 ( AccountManager#getAuthToken ) - 認証状態の確認 - 認証されてなかったら認証許可ダイアログを表示 - 認証されてたらAuthTokenを取得 - 認証許可が外れてたら再取得も自分で…

Slide 8

Slide 8 text

Previous Google Sign-In... - アカウントの選択でつかうメソッド AccountManager.newChooseAccountIntent(Account selectedAccount, ArrayList allowableAccounts, String[] allowableAccountTypes, boolean alwaysPromptForAccount, String descriptionOverrideText, String addAccountAuthTokenType, String[] addAccountRequiredFeatures, Bundle addAccountOptions) - AuthTokenの取得でつかうメソッド AccountManager#getAuthToken(Account account, String authTokenType, Bundle options, boolean notifyAuthFailure, AccountManagerCallBack callback, Handler handler)

Slide 9

Slide 9 text

(´゚д゚`)

Slide 10

Slide 10 text

なんだこれ。。

Slide 11

Slide 11 text

引数多い、みにくい、つらい。。

Slide 12

Slide 12 text

これ、実際に使おうと思うと結構たいへん。。

Slide 13

Slide 13 text

なので

Slide 14

Slide 14 text

OAuthHelperとかいうのを作ってみた

Slide 15

Slide 15 text

OAuthHelperとは - アカウント選択 - 認証許可確認 - AuthTokenの取得 - 再認証

Slide 16

Slide 16 text

OAuthHelperとは - アカウント選択 - 認証許可確認 - AuthTokenの取得 - 再認証 これらのめんどうな処理を まとめてやってくれます

Slide 17

Slide 17 text

使い方は簡単

Slide 18

Slide 18 text

1. OAuthHelper.OnAuthListenerを実装 public class MainActivity extends ActionBarActivity implements OAuthHelper.OnAuthListener { @Override public void getAuthToken(String authToken) { // ここにAuthTokenを使った処理を書く } }

Slide 19

Slide 19 text

2. OAuthHelperのインスタンスを生成 public class MainActivity extends ActionBarActivity implements OAuthHelper.OnAuthListener { @Override protected void onCreate(Bundle savedInstanceState) { ... // Activity activity, String Scopes, OnAuthListener listener mHelper = new OAuthHelper( this, "oauth2:" + UrlshortenerScopes.URLSHORTENER, this ); ... } }

Slide 20

Slide 20 text

3. Intentから戻ってきた時の処理 ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // アカウント選択や認証画面から返ってきた時の処理を OAuthHelperで受け取る mHelper.onActivityResult(requestCode, resultCode, data); } ...

Slide 21

Slide 21 text

4. 認証開始 mHelper.startAuth(false);

Slide 22

Slide 22 text

4. 認証開始 mHelper.startAuth(false); ↑ これの引数はAuthTokenの再取得するかどうか

Slide 23

Slide 23 text

実行するとこうなります

Slide 24

Slide 24 text

実行するとこうなります

Slide 25

Slide 25 text

実行するとこうなります

Slide 26

Slide 26 text

よし!

Slide 27

Slide 27 text

これでGoogle Sign-Inを実装するのが楽になったぞ!

Slide 28

Slide 28 text

ε=\_〇ノヒャッホーイ!!

Slide 29

Slide 29 text

が…

Slide 30

Slide 30 text

新しいGoogle Sign-In APIが出たので

Slide 31

Slide 31 text

作って半年で要らない子に。。

Slide 32

Slide 32 text

il||li_○/ ̄|_il||li ナンテコッタィ

Slide 33

Slide 33 text

まぁそんな子は放っておいて

Slide 34

Slide 34 text

新しいGoogle Sign-In APIを使いましょう

Slide 35

Slide 35 text

New Google Sign-In API - アカウントを取得してサインインするのに権限が必要ない - 新しくデザインされたサインインボタン - Slient Sign-In - 実装も以前より簡単

Slide 36

Slide 36 text

こんな感じの画面

Slide 37

Slide 37 text

こんな感じの画面

Slide 38

Slide 38 text

こんな感じの画面

Slide 39

Slide 39 text

こんな感じの画面

Slide 40

Slide 40 text

Google Sign-In APIの実装 - GoogleSignInOptionsオブジェクトを作成 - GoogleApiClientオブジェクトを作成 - Googleサインインボタンを追加する - サインイン処理の実装

Slide 41

Slide 41 text

1. GoogleSignInOptionsオブジェクトを作成する // 許可させたいAPIのスコープ mScope = new Scope("https://www.googleapis.com/auth/urlshortener"); mGoogleSignInOptions = new GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(mScope) .requestEmail() .build();

Slide 42

Slide 42 text

2. GoogleApiClientオブジェクトを作成する mGoogleApiClient = new GoogleApiClient.Builder(this) /* FragmentActivity, OnConnectionFailedListener */ .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, mGoogleSignInOptions) .addScope(mScope) .build();

Slide 43

Slide 43 text

3. Googleサインインボタンを追加する

Slide 44

Slide 44 text

3. Googleサインインボタンを追加する SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); signInButton.setOnClickListener(this); // セットすると、スコープに適したボタンになる signInButton.setScopes(mGoogleSignInOptions.getScopeArray()); signInButton.setSize(SignInButton.SIZE_WIDE);

Slide 45

Slide 45 text

ScopeがGoogle+だとこんな感じ 3. Googleサインインボタンを追加する

Slide 46

Slide 46 text

4. サインイン処理の実装 private void signIn() { // サインイン用のIntentを取得してIntentを投げる Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } @Override public void onClick(View v) { if(v.getId() == R.id.sign_in_button) { signIn(); } }

Slide 47

Slide 47 text

4. サインイン処理の実装 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { // サインインした結果を取得 GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } }

Slide 48

Slide 48 text

4. サインイン処理の実装 private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // サインインが成功したら、サインインボタンを消して、ユーザー名を表示する mGoogleSignInAccount = result.getSignInAccount(); mStatusTextView.setText( "DisplayName: " + mGoogleSignInAccount.getDisplayName() ); } }

Slide 49

Slide 49 text

5. サインアウト処理の実装 private void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback() { @Override public void onResult(Status status) { showSnackBar(getString(R.string.signed_out)); } }); }

Slide 50

Slide 50 text

6. OAuthTokenの取得 accessToken = GoogleAuthUtil.getToken( MainActivity.this, new Account(mGoogleSignInAccount.getEmail(), "com.google"), "oauth2:" + API_SCOPE );

Slide 51

Slide 51 text

7. Silent Sign-In OptionalPendingResult opr = Auth.GoogleSignInApi.silentSignIn (mGoogleApiClient); if (opr.isDone()) { // サインイン成功時 GoogleSignInResult result = opr.get(); handleSignInResult(result); } else { opr.setResultCallback(new ResultCallback() { @Override public void onResult(GoogleSignInResult googleSignInResult) { // 未サインイン時 } }); }

Slide 52

Slide 52 text

試しにこれを使ってGoogle Url Shortenerで URLを短縮するサンプルを作ってみました

Slide 53

Slide 53 text

Google Sign-In API Sample https://youtu.be/_BpuYe8w4PI

Slide 54

Slide 54 text

新しいGoogle Sign-In APIを使えば

Slide 55

Slide 55 text

こんなに手軽に Google Sign-Inを実装できる!

Slide 56

Slide 56 text

すばらしい!

Slide 57

Slide 57 text

OAuthHelperってなんだよ!誰もしらねえよ!!

Slide 58

Slide 58 text

あんな誰も知らない子のことは忘れて

Slide 59

Slide 59 text

みなさんぜひ新しいGoogle Sign-In APIを使いましょう

Slide 60

Slide 60 text

サンプルコードとか - 【Androidアプリ開発】AndroidでのOAuth認証が簡単に実装できる OAuthHelperを作ってみた http://diary.syarihu.net/2015/05/androidandroidoauthoauthhelper.html - [GitHub] OAuthHelperSample https://github.com/syarihu/OAuthHelperSample - [GitHub] GoogleSignInTest https://github.com/syarihu/GoogleSignInTest

Slide 61

Slide 61 text

参考 - Integrating Google Sign-In into Your Android App https://developers.google.com/identity/sign-in/android/sign-in - Google Sign-In Quickstart https://github.com/googlesamples/google- services/tree/master/android/signin

Slide 62

Slide 62 text

おしまい