新しい Google Sign-In API

Google Identity Services(GIS)は、Google Cloud のインフラストラクチャを 安全なログインと登録を、デベロッパー向けに実装しやすいパッケージで提供します。 このドキュメントでは、次のタスクに使用できる新しい Google ログイン API(GIS の一部)について詳しく説明します。 ユーザーが [Google でログイン] をタップしたときにログインまたは登録のフローを開始する ] ボタンを離します。この API は、既存の Google ログイン API の代わりに使用できます。 ログインフローを行います

この API は、ユーザーが明示的にログインの意思を示した場合にのみ使用してください 。たとえば、ユーザーが [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 を取得します。SignInCredential getSignInCredentialFromIntent から返されるオブジェクトには、 確認することもできます。ユーザーがなんらかの理由でログインに失敗した場合、 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 です追加情報が必要な場合は、ユーザーに プロフィール情報フローに統合できます