新しい Google Sign-In API

Google Identity Services(GIS)は、開発者向けの実装が容易なパッケージに入った新しい API セットで、簡単かつ安全なログインと登録をユーザーに提供します。このドキュメントでは、ユーザーが [Google でログイン] ボタンをタップしたときにログインまたは登録フローを開始するために使用できる、新しい Google ログイン API(GIS の一部)について詳しく説明します。この API は、既存の Google Sign-In API の代わりにログインフローに使用できます。

この API は、ユーザーが Google でログインする意思を明示的に示した場合にのみ使用してください。たとえば、ユーザーがアプリで「Google でログイン」ボタンをクリックするときに、この API を使用します。

この API を使用して、アプリの起動時や別のトリガー(ショッピング カートへの商品の追加など)に応じてユーザーにログインを促すことはできません。これらのユースケースでは、ワンタップでのログインと登録を使用します。

新しい API で Google ログインフローを開始すると、次の UI が表示されます。

Google ログイン

始める前に

Google API Console プロジェクトを設定し、Android Studio プロジェクトをセットアップします。

ログイン リクエストを行う

Identity API を使用して Google ログインフローを起動するには、GetSignInRequest オブジェクトを作成します。次に、SignInClient オブジェクトで getSignInIntent を呼び出します。この呼び出しは非同期です。成功すると、ダイアログを起動する PendingIntent が提供されます。

    private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */

    private void signIn() {
        GetSignInIntentRequest request =
            GetSignInIntentRequest.builder()
                .setServerClientId(getString(R.string.server_client_id))
                .build();

        Identity.getSignInClient(activity)
            .getSignInIntent(request)
            .addOnSuccessListener(
                    result -> {
                        try {
                            startIntentSenderForResult(
                                    result.getIntentSender(),
                                    REQUEST_CODE_GOOGLE_SIGN_IN,
                                    /* fillInIntent= */ null,
                                    /* flagsMask= */ 0,
                                    /* flagsValue= */ 0,
                                    /* extraFlags= */ 0,
                                    /* options= */ null);
                        } catch (IntentSender.SendIntentException e) {
                            Log.e(TAG, "Google Sign-in failed");
                        }
                    })
            .addOnFailureListener(
                    e -> {
                        Log.e(TAG, "Google Sign-in failed", e);
                    });
    }

ログイン結果を処理する

onActivityResultSignInCredential を取得します。getSignInCredentialFromIntent から返される SignInCredential オブジェクトには、有効なログインに関する情報が含まれています。ユーザーがなんらかの理由でログインに失敗した場合は、ApiException がスローされます。

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
                try {
                    SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
                    // Signed in successfully - show authenticated UI
                    updateUI(credential);
                } catch (ApiException e) {
                    // The ApiException status code indicates the detailed failure reason.
                }
            }
        }
    }
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
    // handle intent result here
});

ログインが成功すると、常にユーザーの氏名、メールアドレス、プロフィール写真の URL が返されます。追加情報が必要な場合は、完全なプロフィール情報フローにユーザーを誘導できます。