Nouvelle API Google Sign-In

Google Identity Services (GIS) est un nouvel ensemble d'API qui permet aux utilisateurs de se connecter et de s'inscrire facilement et de façon sécurisée, dans un package facile à implémenter pour les développeurs. Ce document présente une nouvelle API Google Sign-In (qui fait partie de SIG) qui peut être utilisée pour lancer le flux de connexion ou d'inscription lorsqu'un utilisateur appuie sur un bouton "Se connecter avec Google". Cette API peut être utilisée à la place des API Google Sign-In existantes pour les flux de connexion.

Vous ne devez utiliser cette API que lorsque l'utilisateur affiche explicitement son intention de se connecter avec Google. Par exemple, utilisez cette API lorsqu'ils cliquent sur un bouton "Se connecter avec Google" dans votre application.

Vous ne devez pas utiliser cette API pour inviter l'utilisateur à se connecter au lancement de l'application ou en réponse à un autre déclencheur, tel que l'ajout d'un article au panier. Pour ces cas d'utilisation, reportez-vous à la page Se connecter et s'inscrire avec One Tap.

Lorsque vous démarrez le flux Google Sign-In avec la nouvelle API, l'interface utilisateur suivante s'affiche:

Google Sign-In

Avant de commencer

Configurez un projet dans la console Google APIs et configurez votre projet Android Studio.

Envoyer une demande de connexion

Pour lancer un flux Google Sign-In à l'aide de l'API Identity, créez un objet GetSignInRequest. Ensuite, sur un objet SignInClient, appelez getSignInIntent. Cet appel est asynchrone et en cas de réussite, il fournit un PendingIntent pour lancer la boîte de dialogue.

    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);
                    });
    }

Gérer les résultats de connexion

Dans onActivityResult, récupérez un SignInCredential. L'objet SignInCredential renvoyé par getSignInCredentialFromIntent contient des informations sur une connexion valide. Si l'utilisateur ne parvient pas à se connecter pour une raison quelconque, une ApiException est générée.

    @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
});

Une fois la connexion établie, le nom complet de l'utilisateur, son adresse e-mail et l'URL de sa photo de profil sont toujours renvoyés. Si vous avez besoin d'informations supplémentaires, vous pouvez rediriger les utilisateurs vers un flux complet d'informations de profil.