Android - Inicio de sesión con Facebook - Documentación - Facebook para desarrolladores

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

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

Sigue los pasos que se detallan 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 forma parte del SDK de Facebook para Android. Para poder usarlo en tu proyecto, establécelo como dependencia en Maven o descárgalo. Elige el método que prefieras mediante el siguiente botón.

Mediante Maven

  1. En tu proyecto, abre tu_aplicación > Gradle Scripts > build.gradle (proyecto) y comprueba que el siguiente repositorio figure en la sección buildscript { repositories {}}:
    jcenter() 
    
  2. En tu proyecto, abre tu_aplicación > Gradle Scripts > build.gradle (módulo: aplicación) y añade la siguiente declaración de implementación a la sección dependencies{} para depender de la última versión del SDK de inicio de sesión con Facebook.
     implementation 'com.facebook.android:facebook-login:[5,6)'
    
  3. Compila el proyecto.

Cuando utilizas el SDK de inicio de sesión con Facebook, los eventos de la aplicación se registran automáticamente y se recopilan para Facebook Analytics, a no ser que desactives el registro automático de eventos. Si quieres obtener información más detallada sobre los datos recopilados y cómo desactivar el registro automático de eventos, consulta el apartado sobre el registro automático de eventos de la aplicación.

Mediante el SDK de Facebook

Para descargar el SDK, haz clic en el siguiente botón:
Descargar SDK de Facebook

Cuando utilizas el SDK de inicio de sesión con Facebook, los eventos de la aplicación se registran automáticamente y se recopilan para Facebook Analytics, a no ser que desactives el registro automático de eventos. Si quieres obtener información más detallada sobre los datos recopilados y cómo desactivar el registro automático de eventos, consulta el apartado sobre el registro automático de eventos de la aplicación.

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.

Crea cadenas para el identificador de tu aplicación de Facebook y para habilitar las pestañas personalizadas de Chrome. Asimismo, añade FacebookActivity a tu manifiesto de Android.
  1. Abre el archivo /app/res/values/strings.xml.
  2. Añade lo siguiente:
    <string name="facebook_app_id">[APP_ID]</string> <string name="fb_login_protocol_scheme">fb[APP_ID]</string>
    
  3. Abre el archivo /app/manifest/AndroidManifest.xml.
  4. Añade el siguiente elemento uses-permission detrás de application:
      <uses-permission android:name="android.permission.INTERNET"/>
    
  5. Añade el elemento meta-data siguiente, una actividad para Facebook, y una actividad y un filtro de intención para las pestañas personalizadas de Chrome dentro del elemento application:
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <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>
    

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 las funciones disponibles en la clase LoginManager. Cuando alguien hace clic en el botón, se activa el inicio de sesión con los permisos establecidos en LoginManager. El botón realiza un seguimiento del estado de inicio de sesión y muestra el texto correcto en función del estado de autenticación de la persona.
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

Llama a CallbackManager.Factory.create para crear un administrador de devoluciones de llamada que gestione las respuestas de inicio de sesión.
callbackManager = CallbackManager.Factory.create();
Si vas a añadir el botón a un fragmento, debes actualizar tu actividad para poder usar dicho fragmento. Puedes personalizar las propiedades de Login button y registrar una devolución de llamada en los métodos onCreate() o onCreateView(). Entre las propiedades que puedes personalizar se incluyen LoginBehavior, DefaultAudience, ToolTipPopup.Style y los permisos de LoginButton. Por ejemplo:
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("email");
    // If using in a fragment
    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 las clases LoginManager o LoginButton. Si registras la devolución de llamada con la clase LoginButton, no necesitas hacerlo también en el administrador de inicio de sesión.
La devolución de llamada de la clase LoginManager se añadirá 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 parámetro registerCallback para que el inicio de sesión sea correcto. Puedes optar por seguir los cambios del identificador de acceso actual con la clase AccessTokenTracker que se describe más adelante.
Por último, en el método onActivityResult, llama a callbackManager.onActivityResult para pasar los resultados del inicio de sesión a la clase LoginManager mediante la interfaz callbackManager.
      @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 de la clase FacebookSDK o con el uso compartido de esta debe dirigir el método onActivityResult a la interfaz 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

Express login logs people in with their Facebook account across devices and platform. If a person logs into your app on Android and then changes devices, express login logs them in with their Facebook account, instead of asking for them to select a login method. This avoid creating duplicate accounts or failing to log in at all. The following code shows how to enable 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
    }
});

  

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 otras guías 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 las personas que usen el inicio de sesión de la plataforma, es posible que tengas que enviar tu aplicación a revisión antes de publicarla.