私たちはされているウェブのためのGoogleのサインインのJavaScriptプラットフォームライブラリを中止します。認証とユーザーのサインインの場合は、両方のために新しいGoogleアイデンティティサービスSDKを使用したWebおよびAndroidの代わりに。

GoogleサインインをAndroidアプリに統合する

GoogleサインインをAndroidアプリに統合するには、Googleサインインを構成し、アプリのレイアウトにサインインフローを開始するボタンを追加します。

あなたが始める前に

Google API Consoleプロジェクトを構成し、AndroidStudioプロジェクトを設定します

GoogleサインインとGoogleSignInClientオブジェクトを構成します

  1. サインインアクティビティのonCreateメソッドで、アプリに必要なユーザーデータをリクエストするようにGoogleサインインを設定します。たとえば、ユーザーのIDと基本的なプロファイル情報を要求するようにGoogleサインインを設定するには、 DEFAULT_SIGN_INパラメータを使用してGoogleSignInOptionsオブジェクトを作成します。ユーザーのメールアドレスもリクエストするには、 requestEmailオプションを使用してGoogleSignInOptionsオブジェクトを作成します。

    // 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でそれらを指定します。最高のユーザーエクスペリエンスを得るには、サインイン時に、アプリが最小限に機能するために必要なスコープのみをリクエストしてください。必要な場合にのみ追加のスコープをリクエストして、ユーザーが実行したアクションのコンテキストで同意画面が表示されるようにします。追加のスコープの要求を参照してください。

  2. 次に、サインインアクティビティの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が( nullではなく) GoogleSignInAccountオブジェクトを返す場合、ユーザーはすでにGoogleでアプリにサインインしています。それに応じてUIを更新します。つまり、ログインボタンを非表示にしたり、メインアクティビティを起動したり、アプリに適したものを実行したりします。

GoogleSignIn.getLastSignedInAccountnullを返した場合、ユーザーはまだGoogleでアプリにログインしていません。 UIを更新して、Googleログインボタンを表示します。

アプリにGoogleログインボタンを追加します

  1. 標準のGoogleログインボタンアプリケーションのレイアウトにSignInButtonを追加します。

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. オプション:独自のサインインボタンアセットを提供する代わりにデフォルトのサインインボタングラフィックを使用している場合は、 setSizeメソッドを使用してボタンのサイズをカスタマイズできます。

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. Androidアクティビティ(たとえば、 onCreateメソッド)で、ボタンのOnClickListenerを登録して、クリックされたときにユーザーにサインインします。

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

サインインフローを開始します

  1. サインインアカウントチューザーの画像アクティビティの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アカウントを選択するよう求められます。 profileemail 、およびopenid以外のスコープを要求した場合、ユーザーは要求されたリソースへのアクセスを許可するように求められます。

  2. ユーザーがサインインした後、アクティビティのonActivityResultメソッドでユーザーのGoogleSignInAccountオブジェクトを取得できます。

    @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(クライアント側で使用)を取得し、 getIdを使用してユーザーのIDトークンを取得することもできgetIdToken 。現在サインインしているユーザーをバックエンドサーバーに渡す必要がある場合は、IDトークンをバックエンドサーバーに送信し、サーバーでトークンを検証します。