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, pueden conceder a la aplicación permisos para recuperar información o realizar acciones en Facebook en su nombre.

Para obtener un proyecto de ejemplo que ilustre cómo integrar el inicio de sesión con Facebook en una aplicación para Android, accede a FBLoginSample en GitHub.

Sigue los pasos que se describen a continuación para añadir el inicio de sesión con Facebook a tu aplicación.

1. Inicio de sesión

Entra en Facebook para crear aplicaciones o regístrate como desarrollador.

2. Descargar la aplicación de Facebook

Descarga la aplicación de Facebook haciendo clic en el siguiente botó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 de inicio de sesión con Facebook en tu proyecto, puedes descargarlo o establecerlo como dependencia en Maven. Para admitir los cambios en Android 11, utiliza la versión del SDK 8.1 o posterior.

Mediante Maven

  1. En tu proyecto, abre tu_aplicación > Gradle Scripts (Scripts de Gradle) > build.gradle (Project) (build.gradle [proyecto]) y asegúrate de que el siguiente repositorio aparece en el objeto buildscript { repositories {}}:
    mavenCentral() 
    
  2. En tu proyecto, abre tu_aplicación > Gradle Scripts (Scripts de Gradle) > build.gradle (Module: app) (build.gradle [módulo: aplicación]) y añade la siguiente instrucción de implementación a la sección dependencies{} para que dependa 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. Compila el proyecto.

4. Editar los recursos y el manifiesto

Si utilizas la versión 5.15 o posterior del SDK de Facebook para Android, no es necesario que añadas una actividad o un filtro de intención en las pestañas personalizadas de Chrome. Esta funcionalidad está incluida en el SDK.

Al integrar el inicio de sesión con Facebook, determinados eventos de la aplicación se registran y recopilan automáticamente para el Administrador de eventos, a menos que desactives el registro automático de eventos de la aplicación. Para obtener información más detallada sobre los datos que se recopilan y cómo desactivar el registro automático de eventos de la aplicación, consulta Registro automático de eventos de la aplicación.

Crea cadenas para el identificador de tu aplicación de Facebook y para habilitar las pestañas personalizadas de Chrome. Añade también FacebookActivity a tu manifiesto de Android.
  1. Abre el archivo /app/res/values/strings.xml.
  2. Añade 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 aplicación e identificador de acceso del cliente. Por ejemplo, si tu identificador de la aplicación es 1234 y tu identificador de acceso del cliente es 56789, el código tendrá un aspecto similar al siguiente:
    <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. Añade los elementos meta-data al elemento application para tu identificador de la aplicación e identificador de acceso del 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. Añade una actividad para Facebook y una actividad y un filtro de intención para las pestañas personalizadas de Chrome en el 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. Añade un elemento uses-permission al manifiesto después del elemento application:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (Opcional) Para retirar el consentimiento del permiso de identificador publicitario, añade 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. Para establecer directamente el registro automático de eventos de la aplicación en “true” o “false”, puedes definir la marca AutoLogAppEventsEnabled en el archivo AndroidManifest.xml.

  9. Compila el proyecto.

5. Asociar el nombre del paquete y la clase predeterminada con la aplicación

Debes entrar para completar este paso.

6. Proporcionar los hashes de clave de desarrollo y publicación para la aplicación

Debes entrar para completar este paso.

7. Activar el inicio de sesión único en la aplicación

Debes entrar para completar este paso.

8. Añadir el botón “Iniciar sesión” de Facebook

El modo más sencillo de añadir el inicio de sesión con Facebook a tu aplicación es añadir LoginButton desde el SDK. LoginButton es un elemento de la interfaz de usuario que incluye la funcionalidad disponible en LoginManager. Al hacer clic en el botón, se inicia el inicio de sesión con los permisos establecidos en LoginManager. El inicio de sesión con Facebook requiere que los usuarios externos utilicen el permiso avanzado public_profile. El botón realiza un seguimiento del estado del inicio de sesión y muestra el texto correcto en función del estado de autenticación del usuario.
Para añadir el botón “Iniciar sesión” de Facebook, primero añádelo a tu archivo XML de diseño:
<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

Ahora llama a CallbackManager.Factory.create para crear un objeto callbackManager que gestione las respuestas del inicio de sesión.
callbackManager = CallbackManager.Factory.create();
Si vas a añadir el botón a un fragmento, también debes actualizar tu actividad para poder usar dicho fragmento. Puedes personalizar las propiedades del objeto Login button y registrar una devolución de llamada en los métodos onCreate() u onCreateView(). Entre las propiedades que puedes personalizar se incluyen LoginBehavior, DefaultAudience, ToolTipPopup.Style y los permisos del objeto 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 del inicio de sesión, debes registrar una devolución de llamada con uno de los siguientes objetos: LoginManager o LoginButton. Si registras la devolución de llamada con el objeto LoginButton, no es necesario registrarla en el administrador de inicio de sesión.
Añade la devolución de llamada del objeto LoginManager 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 objeto registerCallback para que el inicio de sesión se realice correctamente. Puedes optar por seguir los cambios del identificador de acceso actual con la clase AccessTokenTracker que se describe a continuación.
Por último, en el método onActivityResult, llama a callbackManager.onActivityResult para pasar los resultados del inicio de sesión al objeto LoginManager mediante callbackManager.

Si utilizas fragmentos o actividades de AndroidX, no tienes que invalidar el objeto onActivityResult.

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
Todas las actividades y fragmentos que integres con el inicio de sesión o el uso compartido de FacebookSDK deben enviar el método onActivityResult a callbackManager.

10. Comprobar el estado de inicio de sesión

Tu aplicación solo puede tener a una persona con sesión iniciada cada vez. La clase LoginManager establece los elementos AccessToken y Profile actuales para dicha persona. La clase FacebookSDK guarda estos datos en preferencias de uso compartido y los configura durante el inicio de la sesión. Puedes comprobar si una persona ya tiene sesión iniciada mediante AccessToken.getCurrentAccessToken() y Profile.getCurrentProfile().
Puedes cargar el método AccessToken.getCurrentAccessToken con el SDK desde la memoria caché o desde un marcador de la aplicación cuando esta se inicia en frío. Debes comprobar su validez en el método onCreate de Activity:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
Más adelante puedes realizar el inicio de sesión propiamente dicho, como sucede 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 permite que los usuarios inicien sesión con su cuenta de Facebook en distintos dispositivos y plataformas. Si una persona inicia sesión en tu aplicación en Android y, a continuación, cambia de dispositivo, el inicio de sesión rápido le permite iniciar sesión con su cuenta de Facebook, en lugar de pedirle que seleccione un método de inicio de sesión. De este modo, se evita la creación de cuentas duplicadas o la imposibilidad de iniciar sesión. Para admitir los cambios en Android 11, primero añade el código siguiente 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 habilitar 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 } });   

Siguientes pasos

Enhorabuena. Has añadido el inicio de sesión con Facebook a tu aplicación para Android. No olvides consultar el resto de páginas de documentación para acceder a guías más avanzadas.
Implementa una devolución de llamada de eliminación de datos para responder a la solicitud de los usuarios para eliminar sus datos de Facebook.
Realiza un seguimiento de los identificadores de acceso y los perfiles de tus usuarios.
Administra los datos que se encuentran a disposición de tu aplicación 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 correspondientes soluciones.
En función de los datos de Facebook que solicites a los usuarios que usen el inicio de sesión de la plataforma, es posible que tengas que enviar tu aplicación a revisión antes de lanzarla.