Google ログインを Android アプリに統合するには、Google ログインと ログインフローを開始するボタンをアプリのレイアウトに追加する。
始める前に
Google API Console プロジェクトを設定し、Android Studio プロジェクトをセットアップします。
Google ログインと GoogleSignInClient オブジェクトを構成する
ログイン アクティビティの
onCreate
メソッドで、Google ログインを次のように設定します。 アプリで必要なユーザーデータをリクエストします。たとえば、 Google ログインを使ってユーザーのリクエストや基本的なプロフィール情報を作成し、GoogleSignInOptions
DEFAULT_SIGN_IN
パラメータ付きでオブジェクトを作成します。ユーザーのメールGoogleSignInOptions
オブジェクトを作成し、requestEmail
オプション。// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
Google API にアクセスするための追加のスコープをリクエストする必要がある場合は、
requestScopes
で指定します。最適なユーザー エクスペリエンスを実現するため、ログイン時には、 パフォーマンスが向上します。追加のスコープは、必要な場合にのみリクエストしてください。そうすることで、ユーザーは、実行したアクションのコンテキストで同意画面を表示できます。スコープの追加をリクエストするをご覧ください。次に、ログイン アクティビティの
onCreate
メソッドでも、 指定したオプションを含むGoogleSignInClient
オブジェクト。// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
すでにログインしているユーザーを確認する
アクティビティの onStart
メソッドで、ユーザーがすでにログイン済みかどうかを確認します。
Google でアプリを公開できます。
// Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); updateUI(account);
GoogleSignIn.getLastSignedInAccount
が GoogleSignInAccount
オブジェクトを返す場合
(null
ではない)の場合、ユーザーはすでに Google でアプリにログインしています。
必要に応じて UI を更新します。つまり、ログインボタンを非表示にして、
メイン アクティビティなど、アプリに適したものを選択できます。
GoogleSignIn.getLastSignedInAccount
が null
を返した場合、ユーザーは Google でアプリにログインしていません。UI を更新して Google ログインを表示する
] ボタンを離します。
Google ログインボタンをアプリに追加する
アプリケーションのレイアウトに
SignInButton
を追加します。<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
省略可: Google Chat の設定ではなく、デフォルトのログインボタンのグラフィック 独自のログインボタン アセットを提供する場合、ボタンの
setSize
でサイズを指定します。 メソッドを呼び出します。// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Android アクティビティ(
onCreate
メソッド内など)で、次の内容を登録します。 ボタンのOnClickListener
を指定して、ユーザーがクリックされたときにログインするようにします。findViewById(R.id.sign_in_button).setOnClickListener(this);
ログインフローを開始する
アクティビティの
onClick
メソッドで、getSignInIntent
でのログイン インテント メソッドを実行し、startActivityForResult
でインテントを開始します。@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
インテントを開始すると、ログイン用の Google アカウントを選択するよう求められます。 できます。
profile
、email
、openid
を超えるスコープをリクエストした場合、 要求されたリソースへのアクセスを許可するように求められます。ユーザーがログインすると、
GoogleSignInAccount
が表示されます。 アクティビティのonActivityResult
メソッドでユーザー用にオブジェクトが用意されています。@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }
GoogleSignInAccount
オブジェクトには、ログイン中のユーザーに関する情報(ユーザー名など)が含まれています。private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }
getEmail
を使用してユーザーのメールアドレスを取得したり、getId
を使用してユーザーの Google ID(クライアントサイドで使用)を取得したり、getIdToken
を使用してユーザーの ID トークンを取得したりすることもできます。現在ログインしているユーザーをバックエンド サーバーにログインさせる必要がある場合は、ID トークンをバックエンド サーバーに送信し、サーバー上でトークンの検証を実行します。