El 5 de octubre de 2021, el inicio de sesión con Facebook dejará de ser compatible con los navegadores insertados en Android (WebViews) para autenticar a los usuarios.

Para obtener información general sobre esta obsolescencia, consulta la entrada de blog Deprecating support for FB Login authentication on Android embedded browsers.

Para obtener información sobre la obsolescencia de las visualizaciones web y el uso de pestañas personalizadas en su lugar, consulta Deprecating Android WebViews.

Inicio de sesión con Facebook para Android: inicio rápido

El SDK de Facebook para Android permite a las personas iniciar sesión en tu aplicación mediante el inicio de sesión con Facebook. Al hacerlo así, las personas pueden conceder permiso a la app para obtener información o realizar acciones en Facebook en su nombre.

Para ver un proyecto de ejemplo que ilustra la manera en que se integra el inicio de sesión con Facebook en una aplicación de Android, consulta FBLoginSample en GitHub.

Sigue los pasos a continuación para agregar el inicio de sesión con Facebook a tu app.

1. Iniciar sesión

Inicia sesión en Facebook para crear apps o regístrate como desarrollador.

2. Descargar la app de Facebook

Descarga la aplicación de Facebook haciendo clic en el botón a continuación.

3. Integrar el SDK de Facebook

El SDK de inicio de sesión con Facebook para Android es un componente del SDK de Facebook para Android. Para usar el SDK del inicio de sesión con Facebook en tu proyecto, puedes descargarlo o establecerlo como dependencia en Maven. Para admitir los cambios realizados en Android 11, usa la versión 8.1 del SDK o una posterior.

Con Maven

  1. En tu proyecto, abre tu_aplicación > Gradle Scripts > build.gradle (Project) y asegúrate de que el repositorio siguiente figure en buildscript { repositories {}}:
    mavenCentral() 
    
  2. En tu proyecto, abre tu_aplicación > Gradle Scripts > build.gradle (Module: app) y agrega la siguiente instrucción de implementación a la sección dependencies{} para depender de la versión más reciente del SDK de inicio de sesión con Facebook:
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. Crea tu proyecto.

4. Editar tus recursos y tu manifiesto

Si usas la versión 5.15 o posterior del SDK de Facebook para Android, no necesitas agregar un filtro de intent ni de actividad para las pestañas personalizadas de Chrome. Esta funcionalidad está incluida en el SDK.

Después de que integras el inicio de sesión con Facebook, se registran y recopilan automáticamente determinados eventos de la app en el administrador de eventos, a menos que desactives el registro automático de eventos. Para obtener información sobre qué información se recopila y cómo desactivar el registro de eventos de la app de manera automática, consulta Registro automático de eventos de la app.

Crea cadenas para el identificador de tu app de Facebook y las necesarias para activar las pestañas personalizadas de Chrome. También, agrega FacebookActivity a tu manifiesto de Android.
  1. Abre el archivo /app/res/values/strings.xml.
  2. Agrega los elementos string con los nombres facebook_app_id, fb_login_protocol_scheme y facebook_client_token, y establece los valores de tu identificador de la app y token de cliente. Por ejemplo, si tu identificador es 1234 y tu token de cliente es 56789, tu código se verá de la siguiente manera:
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. Abre el archivo /app/manifest/AndroidManifest.xml.
  4. Agrega los elementos meta-data al elemento application del identificador de la app y del token de cliente:
    <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. Agrega una actividad para Facebook y una actividad y un filtro de intent para las pestañas personalizadas de Chrome dentro del 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. Agrega el elemento uses-permission al manifiesto después del elemento application:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (Opcional) Para dar de baja el permiso de identificador del anunciante, agrega un elemento uses-permission al manifiesto después del elemento application:
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. Es posible configurar directamente la recopilación automática de eventos de la app en "verdadero" o "falso" si se establece la marca AutoLogAppEventsEnabled en el archivo AndroidManifest.xml.

  9. Crea tu proyecto.

5. Asociar el nombre de tu paquete y la clase predeterminada con tu app

Debes iniciar sesión para completar este paso.

6. Proporcionar los hashes de clave de desarrollo y activación para la app

Debes iniciar sesión para completar este paso.

7. Activar el inicio de sesión único en tu app

Debes iniciar sesión para completar este paso.

8. Agregar el botón de inicio de sesión con Facebook

El modo más sencillo de agregar el inicio de sesión con Facebook a tu app es agregar LoginButton desde el SDK. El permiso LoginButton es un elemento que incluye la funcionalidad disponible en LoginManager. Cuando alguien hace clic en el botón, el inicio de sesión se inicia con los permisos configurados en LoginManager. El inicio de sesión con Facebook requiere el permiso public_profile avanzado, que utilizarán los usuarios externos. El botón sigue el estado del inicio de sesión y muestra el texto correcto según el estado de autenticación de una persona.
Para agregar el botón de inicio de sesión con Facebook, primero agrégalo a tu archivo XML:
<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. Registrar una devolución de llamada

Crea un administrador de devolución de llamadas que se encargue de las respuestas del inicio de sesión llamando a CallbackManager.Factory.create.
callbackManager = CallbackManager.Factory.create();
Si agregas el botón a un fragmento, también debes actualizar tu actividad para usar el fragmento. Puedes personalizar las propiedades de Login button y registrar una devolución de llamada en tu método onCreate() u onCreateView(). Entre las propiedades que puedes personalizar están LoginBehavior, DefaultAudience, ToolTipPopup.Style y los permisos de LoginButton. Por ejemplo:
      
    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
        }
    });
Para responder a un resultado de inicio de sesión, debes registrar una devolución de llamada con LoginManager o LoginButton. Si registras la devolución de llamada con LoginButton, no necesitas hacerlo también en el administrador de inicio de sesión.
La devolución de llamada del administrador de inicio de sesión se agregará a tu actividad o al método onCreate() del fragmento:
    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 el inicio de sesión se realiza correctamente, el parámetro LoginResult tendrá el nuevo objeto AccessToken y los permisos concedidos o rechazados más recientemente.
No necesitas un método registerCallback para que el inicio de sesión sea correcto. Puedes optar por seguir los cambios del token de acceso actual con la clase AccessTokenTracker que se describe más adelante.
Por último, en tu método onActivityResult, llama a callbackManager.onActivityResult para pasar el resultado del inicio de sesión a LoginManager mediante callbackManager.

Si usas actividades o fragmentos de AndroidX, no es necesario que anules "onActivityResult".

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Cualquier actividad y fragmento que integres con el inicio de sesión con el objeto FacebookSDK o con el uso compartido de este debe dirigir a onActivityResult a callbackManager.

10. Comprobar el estado del inicio de sesión

Tu aplicación solo puede iniciar la sesión de una persona a la vez, y LoginManager establece el AccessToken y el Profile actuales para esa persona. El SDK de Facebook guarda estos datos en las preferencias de uso compartido y los configura al principio de la sesión. Puedes comprobar si una persona ya tiene sesión iniciada mediante AccessToken.getCurrentAccessToken() y Profile.getCurrentProfile().
Puedes cargar AccessToken.getCurrentAccessToken con el SDK desde la caché o desde un marcador de aplicación cuando la aplicación se inicia por primera vez. Debes comprobar su validez en Activity, con el método onCreate:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Más adelante puedes realizar el inicio de sesión en sí, como en el método OnClickListener de un botón personalizado:
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. Activar el inicio de sesión rápido

El inicio de sesión rápido inicia la sesión en la cuenta de Facebook de una persona en diferentes dispositivos y plataformas. Si una persona inicia sesión en tu app en Android y, luego, cambia de dispositivo, el inicio de sesión rápido inicia la sesión en su cuenta de Facebook, en lugar de solicitarle la selección de un método de inicio de sesión. De esta manera, se evita la creación de cuentas duplicadas o, incluso, no poder iniciar sesión. Para admitir los cambios realizados en Android 11, primero, agrega el siguiente código al elemento queries de tu archivo /app/manifest/AndroidManifest.xml.
  
<queries>
  <package android:name="com.facebook.katana" />
</queries> 
  
En el siguiente código, se muestra cómo activar el inicio de sesión rápido.
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
    }
});

  

Próximos pasos

¡Felicitaciones, agregaste el inicio de sesión con Facebook a tu app para Android! No te olvides de consultar el resto de las páginas de documentación para acceder a guías más avanzadas.
Implementa una devolución de llamada para eliminación de datos a fin de responder a las solicitudes que hacen las personas para que se eliminen sus datos de Facebook.
Haz un seguimiento de los tokens de acceso y de los perfiles de tus usuarios.
Administra los datos a los que tiene acceso tu app a través del inicio de sesión con Facebook.
¿Tienes problemas para integrar el inicio de sesión con Facebook? Revisa una lista de los problemas más habituales y sus soluciones.
Según los datos de Facebook que solicites a las personas que usan el inicio de sesión con Facebook, es posible que necesites enviar tu app a revisión antes de lanzarla.