Facebook Login per Android - Avvio rapido

L'SDK di Facebook per Android consente alle persone di effettuare l'accesso alla tua app con Facebook Login. In questo modo, le persone concedono all'app le autorizzazioni che ti consentono di recuperare informazioni o di eseguire azioni per conto loro su Facebook.

Per un progetto di esempio che illustra come integrare Facebook Login in un'app per Android, consulta FBLoginSample su GitHub.

Segui i passaggi riportati di seguito per aggiungere Facebook Login alla tua app.

Accesso: 1.

Accedi a Facebook per creare app o iscriverti come sviluppatore.

2. Download dell'app Facebook

Scarica l'app Facebook cliccando sul pulsante sotto.

3. Integrazione dell'SDK di Facebook

L'SDK Facebook Login per Android è un componente dell'SDK di Facebook per Android. Per usare l'SDK Facebook Login nel tuo progetto, rendilo una dipendenza in Maven o scaricalo. Per supportare le modifiche in Android 11, utilizza SDK versione 8.1 o successiva.

Uso di Maven

  1. Nel tuo progetto, apri la_tua_app > Gradle Scripts > build.gradle (Project), assicurandoti che il repository seguente sia elencato in buildscript { repositories {}}:
    mavenCentral() 
    
  2. Nel tuo progetto, apri la_tua_app > Gradle Scripts > build.gradle (Module: app) e aggiungi l'istruzione di implementazione seguente alla sezione dependencies{} per impostare la dipendenza sulla versione più recente dell'SDK di Facebook Login:
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. Crea il progetto.

4. Modifica delle risorse e del file manifest

Se usi la versione 5.15 o successiva dell'SDK di Facebook per Android, non è necessario aggiungere un filtro di attività o intent per le tab personalizzate di Chrome. Questa funzionalità è inclusa nell'SDK.

Dopo aver integrato Facebook Login, alcuni eventi nell'app vengono registrati e raccolti automaticamente per Gestione eventi, a meno che tu non disabiliti la registrazione automatica degli eventi nell'app. Per maggiori dettagli sul tipo di informazioni raccolte e su come disabilitare la registrazione automatica degli eventi nell'app, consulta Registrazione automatica degli eventi nell'app.

Crea stringhe per il tuo ID app Facebook e per quelli necessari per abilitare le tab personalizzate di Chrome. Inoltre, aggiungi FacebookActivity al tuo file manifest di Android.
  1. Apri il file /app/res/values/strings.xml.
  2. Aggiungi elementi string con i nomi facebook_app_id, fb_login_protocol_scheme e facebook_client_token, e imposta i valori su ID app e Token client. Ad esempio, se l'ID app è 1234 e il token client è 56789, il codice sarà il seguente:
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. Apri il file /app/manifest/AndroidManifest.xml.
  4. Aggiungi elementi meta-data all'elemento application per il tuo ID app e token client:
    <application android:label="@string/app_name" ...>
        ...
       	<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
       	<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
    
  5. Aggiungi un'attività per Facebook, quindi un filtro di attività e intent per le tab personalizzate di Chrome all'interno dell'elemento application:
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                    "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    
  6. Aggiungi un elemento uses-permission al file manifest dopo l'elemento application:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (Facoltativo) Per disattivare l'autorizzazione ID pubblicitario, aggiungi un elemento uses-permission al file manifest dopo l'elemento application:
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. Puoi impostare direttamente la registrazione automatica degli eventi nell'app su "true" o "false" impostando il flag AutoLogAppEventsEnabled nel file AndroidManifest.xml.

  9. Crea il progetto.

5. Associazione del nome del pacchetto e della classe predefinita all'app

Devi effettuare l'accesso per completare questo passaggio.

6. Inserimento degli hash chiave di release e di sviluppo per l'app

Devi effettuare l'accesso per completare questo passaggio.

7. Abilitazione del Single Sign On per l'app

Devi effettuare l'accesso per completare questo passaggio.

8. Aggiunta del pulsante Accedi di Facebook

Il modo più semplice per aggiungere Facebook Login alla tua app è aggiungere LoginButton dall'SDK. LoginButton è un elemento dell'interfaccia utente che racchiude le funzionalità disponibili in LoginManager. Quando qualcuno clicca sul pulsante, viene avviata la procedura di accesso con le autorizzazioni impostate in LoginManager. Facebook Login richiede l'autorizzazione advanced public_profile, che deve essere utilizzata da utenti esterni. Il pulsante segue lo stato di accesso e mostra il testo corretto in base allo stato di autenticazione dell'utente.
Per aggiungere il pulsante Facebook Login, aggiungilo innanzitutto al file XML del layout:
<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

9. Registrazione di una callback

Adesso crea un elemento callbackManager per gestire le risposte all'accesso tramite una chiamata a CallbackManager.Factory.create.
callbackManager = CallbackManager.Factory.create();
Se aggiungi il pulsante a un frammento, devi anche aggiornare l'attività affinché il frammento stesso possa essere usato. Puoi personalizzare le proprietà di Login button e registrare una callback nel metodo onCreate() o onCreateView(). Puoi personalizzare le proprietà LoginBehavior, DefaultAudience, ToolTipPopup.Style e le autorizzazioni di LoginButton. Ad esempio:
      
    private static final String EMAIL = "email";
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
Per rispondere a un risultato di accesso, registra una callback con LoginManager o LoginButton. Se registri la callback con LoginButton, non sarà necessario registrarla anche su LoginManager.
Aggiungi la callback di LoginManager all'attività o al metodo onCreate() del frammento:
    callbackManager = CallbackManager.Factory.create();      
      
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                }
    });
Se l'accesso viene effettuato correttamente, il parametro LoginResult otterrà il nuovo AccessToken e le autorizzazioni concesse o negate di recente.
Per completare l'accesso non è necessario usare registerCallback, puoi seguire le modifiche del token d'accesso attuale usando la classe AccessTokenTracker, come descritto sotto.
Infine, nel tuo metodo onActivityResult, chiama callbackManager.onActivityResult per passare i risultati di accesso a LoginManager tramite callbackManager.

Se usi attività o frammenti AndroidX, non devi eseguire l'override di "onActivityResult".

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Ogni attività e frammento integrati con Login o Share di FacebookSDK devono inviare onActivityResult a callbackManager.

10. Verifica dello stato d'accesso

L'accesso all'app è consentito a un solo utente alla volta, quindi LoginManager imposta gli attuali AccessToken e Profile per tale utente. FacebookSDK salva i dati nelle preferenze condivise, impostandoli all'inizio della sessione. Puoi vedere se l'utente ha già effettuato l'accesso controllando AccessToken.getCurrentAccessToken() e Profile.getCurrentProfile().
Puoi caricare AccessToken.getCurrentAccessToken con l'SDK dalla cache o dai segnalibri quando l'avvio dell'app avviene a freddo. Controllane la validità nel metodo onCreate di Activity:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Successivamente, esegui l'accesso vero e proprio, come nell'OnClickListener di un pulsante personalizzato:
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. Abilitazione dell'accesso veloce

L'accesso veloce consente agli utenti di accedere con il loro account Facebook su più dispositivi e piattaforme. Se una persona accede alla tua app su Android e poi cambia dispositivo, l'accesso rapido effettua l'accesso con il loro account Facebook, invece di chiedere di selezionare un metodo di accesso. Questo evita di creare account duplicati o di non riuscire ad accedere affatto. Per supportare le modifiche in Android 11, aggiungi prima il seguente codice all'elemento queries nel tuo file /app/manifest/AndroidManifest.xml.
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
Il codice seguente mostra come abilitare l'accesso veloce.
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });   

Passaggi successivi

Congratulazioni, hai aggiunto Facebook Login alla tua app per Android! Consulta le altre pagine della documentazione per guide più avanzate.
Implementa una callback per l'eliminazione dei dati per rispondere alla richiesta delle persone di eliminare i propri dati da Facebook.
Monitora il token d'accesso e il profilo dei tuoi utenti.
Gestisci i dati a cui può accedere la tua app attraverso Facebook Login.
Hai problemi con l'integrazione di Facebook Login? Consulta una lista di problemi comuni e le relative soluzioni.
A seconda dei dati di Facebook che richiedi alle persone tramite Facebook Login, potresti dover inviare la tua app per l'analisi prima del lancio.
Per la creazione del tuo flusso di accesso, consulta Creazione manuale di un flusso di accesso.