Новый API входа в Google

Google Identity Services (GIS) — это новый набор API, который обеспечивает пользователям простой и безопасный вход и регистрацию в удобном для разработчиков пакете. В этом документе подробно описан новый API входа в Google (часть ГИС), который можно использовать для запуска процесса входа или регистрации, когда пользователь нажимает кнопку «Войти с помощью Google». Этот API можно использовать вместо существующих API входа в систему Google для потоков входа.

Этот API следует использовать только в том случае, если пользователь явно выражает намерение войти в систему с помощью Google. Например, используйте этот API, когда они нажимают кнопку «Войти через Google» в вашем приложении.

Не следует использовать этот API, чтобы предлагать пользователю выполнить вход при запуске приложения или в ответ на другой триггер, например добавление товара в корзину. В таких случаях используйте вход и регистрацию в одно касание .

Когда вы запустите процесс входа в Google с новым API, он отобразит следующий пользовательский интерфейс:

Вход в Google

Прежде чем вы начнете

Настройте проект консоли Google API и проект Android Studio .

Сделать запрос на вход

Чтобы запустить процесс входа в Google с помощью Identity API, создайте объект 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);
                    });
    }

Обработка результатов входа в систему

В onActivityResult получите SignInCredential . Объект 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-адрес изображения профиля. Если вам нужна дополнительная информация, вы можете направить пользователей к полному потоку информации профиля.