Integrar inicio de sesión de Facebook en Android

El sistema operativo Android dispone de la función de inicio de sesión rápido para Facebook, esto es posible gracias a la herramienta SDK (Software Development Kit, lenguaje de programación Android) de Facebook que permite enlazarla con cualquier otra aplicación que disponga de ello. Esto se produce debido a la concesión de la aplicación de permisos para recoger información o realizar una actividad en Facebook con su nombre.

Para poder disponer de esta característica deberemos realizar los siguientes pasos:

1. Registro como desarrollador. De este modo convertirás tu cuenta de Facebook en una cuenta de desarrollador para poder registrar tu aplicación.

2. Descarga Facebook desde tu dispositivo

3. Integra el SDK de Facebook. Para poder realizar este paso debemos saber que el SDK de Facebook se compone de distintas partes, la que necesitaras será “SDK de inicio de sesión con Facebook”. Para poder usarlo en tu proyecto necesitaras establecerlo como dependencia en Maven o bien descargándolo.

    3.1. A través de Maven:

          - En tu proyecto abre your_app > Gradle Scripts > build.gradle (Proyect) y después debes comprobar que aparezca lo siguiente:


buildscript { repositories {}}:

jcenter()

          - Seguidamente, abre your_app > Gradle Scripts > build.gradle (Module:app) y deberás incorporar la 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:[4,5)'

          - Como último paso deberás compilar tu proyecto.

     3.2. Edita los recursos y el manifiesto. La creación de cadenas para la identificación de tu aplicación de Facebook y para la habilitación de las pestañas personalizadas de Chrome. Por ello, deberás añadir la clase FacebookActivity a tu manifiesto de Android. 

          - Abriremos el archivo /app/res/values/strings.xml
         
- Añadiremos lo siguiente:
 
<string name="facebook_app_id">[APP_ID]</string>

<string name="fb_login_protocol_scheme">fb[APP_ID]</string>

          - Abriremos el archivo /app/manifest/AndroidManifest.xml 
          - Añadiremos el elemento uses-permission seguido del elemento aplication:

<uses-permission android:name="android.permission.INTERNET"/>

          - Por último, añadiremos meta-data siguiente, una actividad para Facebook y una actividad y un filtro de intent 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>


Desarrrollo de APP en Murcia con inicio de sesión en Facebook



4. Asociación del nombre del paquete y de la clase predeterminada con la aplicación, proporción de los hashes de clave de desarrollo y activación para la aplicación, y activación del inicio de sesión único en la aplicación. Estos pasos deberán completarse al seleccionar una aplicación.

5. Cómo añadir el botón “iniciar sesión” de Facebook. La forma más rápida y sencilla de realizarlo es añadiendo LoginButton desde el SDK.

Este es un elemento de la interfaz de usuario que conforma las funciones disponibles en la clase LoginManager. Al clicar sobre el botón, se activará el inicio de sesión con los permisos encontrados en el LoginManager.

Mediante la realización de una búsqueda del estado de inicio de sesión mostrando el texto oportuno en función del estado de autentificación del sujeto. El código correspondiente para añadir el botón de inicio de sesión es el siguiente:


<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" />

6. Registra una devolución de llamada. Deberás llamar a CallbackManager.Factory.create para establecer un administrador de devoluciones de llamada que gestione las después de inicio de sesión.

callbackManager = CallbackManager.Factory.create();

A la hora de añadir el botón a un fragmento, debes recargar tu actividad para poder usar ese fragmento, pudiendo personalizar las propiedades de y registrar una devolución de llamada en los métodos onCreate() o onCreateView().

Las propiedades a las que tienes acceso para personalizar se añaden LoginBehavior, DefaultAudience, ToolTipPopup.Style y los permisos de LoginButton.

    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 poder responder a un efecto de inicio de sesión, deberás registrar una devolución de llamada con las clases LoginManager o LoginButton. La devolución de llamada de la clase LoginManager se añadirá a tu actividad o a la forma 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 ha realizado correctamente, el parámetro LoginResult tendrá el nuevo objeto AccessToken y los permisos concedidos o rechazados más recientes. No es necesario un parámetro registerCallback para realizarse un inicio de sesión correcto.

Puedes seguir los cambios del identificador de acceso actual con la clase AccessTokenTracker. Por último, el método onActivityResult, llama a callbackManager.onActivityResult para llevar 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 incorpores con el inicio de sesión de la clase FacebookSDK o con el uso compartido de esta debe mandar el método onActivityResult a la interfaz callbackManager.

7. Comprueba el estado de inicio de sesión. Una única persona deberá estar conectada a ese inicio de sesión. La clase LoginManager establece los elementos AccessToken y Profile actuales para el sujeto conectado.

La clase FacebookSDK archiva estos datos en preferencias de uso compartido y los concuerda durante el inicio de sesión, pudiendo comprobar si el sujeto mantiene la sesión iniciada ya activa a través de AccessToken.getCurrentAccessToken() y Profile.getCurrentProfile().

Cargando 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 frio. La comprobación de su validez se realiza desde el método onCreate de Activity:

AccessToken accessToken = AccessToken.getCurrentAccessToken();

boolean isLoggedIn = accessToken != null && !accessToken.isExpired();

Después podrás 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"));

Con todos estos pasos ya podrás disfrutar de tu inicio de sesión con Facebook en tu aplicación Android.

En digitalDot trabajamos a diario en el desarrollo de aplicaciones móviles multiplataforma si tienes alguna duda sobre la app de tu empresa o aún no tienes una y quieres crearla no dudes en ponerte en contacto con nuestro equipo de diseño y desarrollo de apps.