Nuova API Accedi con Google

I servizi di identità Google (GIS) sono un nuovo insieme di API che offre agli utenti accesso e registrazione sicuri in un pacchetto di facile implementazione per gli sviluppatori. Questo documento descrive una nuova API Accedi con Google (parte di GIS) che può essere utilizzata per: Avvia il flusso di accesso o registrazione quando un utente tocca un'opzione "Accedi con Google" . Questa API può essere utilizzata al posto delle API Accedi con Google esistenti per di accesso.

Dovresti usare questa API solo quando l'utente mostra esplicitamente l'intenzione di accedere con Google. Ad esempio, utilizza questa API quando fanno clic su "Accedi con Google" nell'app.

Non devi utilizzare questa API per richiedere all'utente di eseguire l'accesso all'avvio o nell'accesso all'app risposta a un altro attivatore, ad esempio l'aggiunta di un articolo al carrello degli acquisti. Per questi casi d'uso, usa Accesso e registrazione con One Tap.

Quando avvii il flusso di Accedi con Google con la nuova API, verrà visualizzato questo Interfaccia utente:

Accedi con Google

Prima di iniziare

Configura un progetto della console API di Google e imposta il tuo progetto Android Studio.

Inviare una richiesta di accesso

Per avviare un flusso di Accedi con Google utilizzando l'API Identity, crea un GetSignInRequest oggetto. Quindi, durante una chiamata all'oggetto SignInClient getSignInIntent. Questa chiamata è asincrona e, se l'operazione riesce, fornirà un PendingIntent per aprire la finestra di dialogo.

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

Gestire i risultati di accesso

In onActivityResult recupera un SignInCredential. SignInCredential l'oggetto restituito da getSignInCredentialFromIntent contiene informazioni su credenziali di accesso valide. Se l'utente non riesce ad accedere per qualche motivo, verrà visualizzata una ApiException viene lanciata.

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

Se l'accesso viene eseguito correttamente, vengono sempre restituiti il nome completo, l'indirizzo email e e l'URL dell'immagine del profilo. Se hai bisogno di ulteriori informazioni, puoi indirizzare gli utenti in un flusso di informazioni del profilo completo.