Upgrade to Pro — share decks privately, control downloads, hide ads and more …

New Google Sign-In API

Da5a59469ce3ebb55619ce34f85f8c4f?s=47 syarihu
December 04, 2015

New Google Sign-In API

Google Play Services 8.3で新しく出てきたGoogle Sign-In APIの話と、僕が以前作ったOAuthHelperの話です。

Da5a59469ce3ebb55619ce34f85f8c4f?s=128

syarihu

December 04, 2015
Tweet

Transcript

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

  2. GMO Media, Inc. Engineer - Android - Server Side Java

    @syarihu (しゃりふ)
  3. では、さっそく

  4. New Google Sign-In API

  5. の前に

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

  7. Previous Google Sign-In... - アカウント選択画面 ( AccountManager.newChooseAccountIntent ) - 自分でIntent投げて、

    返ってきたらごにょごにょやって… - AuthTokenの取得 ( AccountManager#getAuthToken ) - 認証状態の確認 - 認証されてなかったら認証許可ダイアログを表示 - 認証されてたらAuthTokenを取得 - 認証許可が外れてたら再取得も自分で…
  8. Previous Google Sign-In... - アカウントの選択でつかうメソッド AccountManager.newChooseAccountIntent(Account selectedAccount, ArrayList<Account> 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<Bundle> callback, Handler handler)
  9. (´゚д゚`)

  10. なんだこれ。。

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

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

  13. なので

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

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

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

    まとめてやってくれます
  17. 使い方は簡単

  18. 1. OAuthHelper.OnAuthListenerを実装 public class MainActivity extends ActionBarActivity implements OAuthHelper.OnAuthListener {

    @Override public void getAuthToken(String authToken) { // ここにAuthTokenを使った処理を書く } }
  19. 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 ); ... } }
  20. 3. Intentから戻ってきた時の処理 ... @Override protected void onActivityResult(int requestCode, int resultCode,

    Intent data) { super.onActivityResult(requestCode, resultCode, data); // アカウント選択や認証画面から返ってきた時の処理を OAuthHelperで受け取る mHelper.onActivityResult(requestCode, resultCode, data); } ...
  21. 4. 認証開始 mHelper.startAuth(false);

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

  23. 実行するとこうなります

  24. 実行するとこうなります

  25. 実行するとこうなります

  26. よし!

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

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

  29. が…

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

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

  32. il||li_◦/ ̄|_il||li ナンテコッタィ

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

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

  35. New Google Sign-In API - アカウントを取得してサインインするのに権限が必要ない - 新しくデザインされたサインインボタン - Slient

    Sign-In - 実装も以前より簡単
  36. こんな感じの画面

  37. こんな感じの画面

  38. こんな感じの画面

  39. こんな感じの画面

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

    サインイン処理の実装
  41. 1. GoogleSignInOptionsオブジェクトを作成する // 許可させたいAPIのスコープ mScope = new Scope("https://www.googleapis.com/auth/urlshortener"); mGoogleSignInOptions =

    new GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(mScope) .requestEmail() .build();
  42. 2. GoogleApiClientオブジェクトを作成する mGoogleApiClient = new GoogleApiClient.Builder(this) /* FragmentActivity, OnConnectionFailedListener */

    .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, mGoogleSignInOptions) .addScope(mScope) .build();
  43. 3. Googleサインインボタンを追加する <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />

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

    signInButton.setScopes(mGoogleSignInOptions.getScopeArray()); signInButton.setSize(SignInButton.SIZE_WIDE);
  45. ScopeがGoogle+だとこんな感じ 3. Googleサインインボタンを追加する

  46. 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(); } }
  47. 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); } }
  48. 4. サインイン処理の実装 private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" +

    result.isSuccess()); if (result.isSuccess()) { // サインインが成功したら、サインインボタンを消して、ユーザー名を表示する mGoogleSignInAccount = result.getSignInAccount(); mStatusTextView.setText( "DisplayName: " + mGoogleSignInAccount.getDisplayName() ); } }
  49. 5. サインアウト処理の実装 private void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() {

    @Override public void onResult(Status status) { showSnackBar(getString(R.string.signed_out)); } }); }
  50. 6. OAuthTokenの取得 accessToken = GoogleAuthUtil.getToken( MainActivity.this, new Account(mGoogleSignInAccount.getEmail(), "com.google"), "oauth2:"

    + API_SCOPE );
  51. 7. Silent Sign-In OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn (mGoogleApiClient); if (opr.isDone())

    { // サインイン成功時 GoogleSignInResult result = opr.get(); handleSignInResult(result); } else { opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(GoogleSignInResult googleSignInResult) { // 未サインイン時 } }); }
  52. 試しにこれを使ってGoogle Url Shortenerで URLを短縮するサンプルを作ってみました

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

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

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

  56. すばらしい!

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

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

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

  60. サンプルコードとか - 【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
  61. 参考 - 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
  62. おしまい