Le 5 octobre 2021, Facebook Login ne prendra plus en charge les navigateurs intégrés à Android (WebViews) pour l’authentification des utilisateurs et utilisatrices.

Pour obtenir des informations générales sur cet abandon, voir la publication de blog Abandon de la prise en charge de l’authentification FB Login sur les navigateurs intégrés Android.

Pour obtenir des informations sur l’abandon des webviews et sur l’utilisation d’onglets personnalisés à la place, voir Abandon des webviews Android.

Facebook Login pour Android : démarrage rapide

Le SDK Facebook pour Android permet aux utilisateurs et utilisatrices de se connecter à votre application à l’aide de la fonctionnalité Facebook Login. Lorsque les internautes se connectent à votre application avec Facebook, ils peuvent autoriser votre application à récupérer des informations sur leur compte ou exécuter des actions sur Facebook en leur nom.

Pour obtenir un exemple de projet qui illustre la façon d’intégrer Facebook Login à une application Android, voir le FBLoginSample sur GitHub.

Suivez les étapes ci-dessous pour ajouter Facebook Login à votre application.

1. Connexion

Veuillez vous connecter à Facebook pour créer des apps ou vous inscrire en tant que développeur.

2. Télécharger l’application Facebook

Téléchargez l’app Facebook en cliquant sur le bouton ci-dessous.

3. Intégrer le SDK Facebook

Le SDK Facebook Login pour Android est un composant du SDK Facebook pour Android. Pour l’utiliser dans votre projet, faites-en une dépendance dans Maven ou téléchargez-le. Pour prendre en charge les modifications dans Android 11, utilisez la version 8.1 (ou une version ultérieure) du SDK.

Avec Maven

  1. Dans votre projet, ouvrez votre_app > Gradle Scripts > build.gradle (Projet) et vérifiez que le référentiel suivant apparaît dans le buildscript { repositories {}} :
    mavenCentral() 
    
  2. Dans votre projet, ouvrez votre_app > Gradle Scripts > build.gradle (Module: app) et ajoutez la déclaration d’implémentation suivante à la section dependencies{} pour dépendre de la dernière version du SDK Facebook Login :
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. Créez votre projet.

4. Modifier vos ressources et votre manifeste

Si vous utilisez la version 5.15 ou ultérieure du SDK Facebook pour Android, vous n'avez pas besoin d'ajouter une activité ou de filtrer pour les onglets personnalisés Chrome. Cette fonctionnalité est incluses dans le SDK.

Après avoir intégré Facebook Login, certains évènements d’application sont automatiquement consignés et collectés pour le Gestionnaire d’évènements, à moins que vous ne désactiviez la consignation automatique des évènements d’application. Pour en savoir plus sur les informations collectées et sur la façon de désactiver la consignation automatique des évènements d’application, consultez la page Consignation automatique des évènements d’application.

Créez des chaînes pour votre ID d’application Facebook et pour ceux qui sont nécessaires à l’activation des onglets personnalisés de Chrome. Ajoutez également FacebookActivity à votre manifeste Android.
  1. Ouvrez le fichier /app/res/values/strings.xml.
  2. Ajoutez les éléments string avec les noms facebook_app_id, fb_login_protocol_scheme et facebook_client_token, et définissez les valeurs sur votre ID d’app et le token client. Par exemple, si votre ID d’application est 1234 et votre token client 56789, votre code ressemble à ce qui suit :
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. Ouvrez le fichier /app/manifest/AndroidManifest.xml.
  4. Ajoutez les éléments meta-data à l’élément application pour votre ID d’application et votre 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. Ajoutez une activité pour Facebook, et une activité et un filtre d’intention pour les onglets personnalisés de Chrome dans votre élément 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. Ajoutez un élément uses-permission au manifeste après l’élément application :
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (Facultatif) Pour désactiver l’autorisation ID d’annonceur, ajoutez un élément uses-permission au manifeste après l’élément application :
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. Vous pouvez directement activer ou désactiver la consignation automatique des évènements d’application en ajoutant la clé AutoLogAppEventsEnabled et la valeur « true » ou « false » dans AndroidManifest.xml.

  9. Créez votre projet.

5. Associer le nom de votre package et la classe par défaut à votre app

Vous devez vous connecter pour finaliser cette étape.

6. Fournir les clés de hachage de développement et de publication de votre app

Vous devez vous connecter pour finaliser cette étape.

7. Activer l’authentification unique pour votre application

Vous devez vous connecter pour finaliser cette étape.

8. Ajouter le bouton Facebook Login

Le moyen le plus simple d’ajouter Facebook Login à votre application est d’y ajouter LoginButton via le SDK. Le bouton LoginButton est un élément de l’UI qui englobe les fonctionnalités disponibles dans le LoginManager. Lorsqu’une personne clique sur ce bouton, la connexion se lance avec les autorisations définies dans le LoginManager. Facebook Login nécessite une autorisation avancée public_profile, pour être utilisé par des utilisateurs et utilisatrices externes. Le bouton suit l’état de connexion et affiche le texte approprié en fonction de l’état d’authentification de la personne.
Pour ajouter le bouton Facebook Login, commencez par l’ajouter à votre fichier XML de disposition :
<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. Enregistrer un rappel

Créez maintenant un gestionnaire callbackManager pour gérer les réponses de connexion en appelant CallbackManager.Factory.create.
callbackManager = CallbackManager.Factory.create();
Si vous ajoutez le bouton à un fragment, vous devez également mettre à jour votre activité pour pouvoir utiliser ce fragment. Vous pouvez personnaliser les propriétés de Login button et enregistrer un rappel dans votre méthode onCreate() ou onCreateView(). Les propriétés que vous pouvez personnaliser incluent les suivantes : LoginBehavior, DefaultAudience, ToolTipPopup.Style et les autorisations sur le LoginButton. Par exemple :
      
    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
        }
    });
Pour répondre à un résultat de connexion, vous devez enregistrer un rappel avec LoginManager ou LoginButton. Si vous l’enregistrez avec LoginButton, nul besoin de l’enregistrer sur le gestionnaire de connexion.
Vous ajoutez le rappel LoginManager à l’activité ou à la méthode onCreate() du fragment :
    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   
                }
    });
Si la connexion réussit, le paramètre LoginResult est doté du nouveau AccessToken, et des autorisations approuvées ou refusées les plus récentes.
Vous n’avez pas besoin d’un registerCallback pour que la connexion aboutisse. Vous pouvez suivre les modifications du token d’accès actuel avec la classe AccessTokenTracker décrite ci-dessous.
Enfin, dans votre méthode onActivityResult, appelez callbackManager.onActivityResult pour passer les résultats de connexion au LoginManager via callbackManager.

Si vous utilisez des activités ou des fragments AndroidX, nul besoin de remplacer onActivityResult.

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Chaque activité et fragment que vous intégrez avec le SDK Facebook Login ou Partager doit transmettre onActivityResult au callbackManager.

10. Vérifier l’état de la connexion

Votre app ne peut prendre en charge qu’une personne connectée à la fois. LoginManager se charge de paramétrer le AccessToken et le Profile actuels de cette personne. Le SDK Facebook enregistre ces données dans les préférences communes et se charge de les paramétrer au début de la session. Vous pouvez déterminer si quelqu’un est actuellement connecté en vérifiant AccessToken.getCurrentAccessToken() et Profile.getCurrentProfile().
Vous pouvez charger AccessToken.getCurrentAccessToken avec le SDK à partir du cache ou d’un signet d’app au lancement de votre app à partir d’un démarrage à froid. Vous devez vérifier sa validité dans la méthode onCreate de votre Activity :
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Vous pouvez alors procéder à la connexion ultérieurement, par exemple, avec OnClickListener et un bouton personnalisé :
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. Activer Express Login

Express Login permet aux utilisateurs de se connecter avec leur compte Facebook d’une plate-forme à une autre et d’un appareil à un autre. Si une personne se connecte à votre application sur Android, puis change d’appareil, Express Login la connecte avec son compte Facebook, plutôt que de lui demander de sélectionner une méthode de connexion. Cette action évite la création de comptes en double ou tout échec de la connexion. Pour prendre en charge les modifications dans Android 11, commencez par ajouter le code suivant à l’élément queries dans votre fichier /app/manifest/AndroidManifest.xml.
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
Le code suivant montre comment activer Express Login.
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 } });   

Étapes suivantes

Félicitations, vous avez ajouté Facebook Login à votre app Android ! Pensez à consulter nos autres pages de documentation pour obtenir davantage d’instructions détaillées.
Implémentez un rappel de suppression de données pour répondre à la demande émanant de personnes souhaitant supprimer leurs données de Facebook.
Suivez le token d’accès et le profil de vos utilisateurs.
Gérez les données auxquelles votre application a accès par l’intermédiaire de Facebook Login.
Vous rencontrez des difficultés lors de l’intégration de Facebook Login ? Consultez la liste des problèmes courants et de leurs solutions.
Selon les données Facebook que vous demandez auprès des personnes qui utilisent Facebook Login, il vous faudra peut-être soumettre votre app pour examen avant son lancement.
Pour créer votre propre processus de connexion, consultez Créer manuellement un processus de connexion.