¿Cómo crear un inicio de sesión de Facebook usando una aplicación de Android?

En este artículo, se explica cómo crear una aplicación de Android que tenga un inicio de sesión de Facebook .

Hay varias funciones de inicio de sesión social para usar en las aplicaciones de Android. Aquí aprenderemos el inicio de sesión social usando Facebook , por lo que es necesario integrar el SDK de Facebook en el proyecto para utilizar el inicio de sesión de Facebook.

A continuación se muestran los diversos pasos sobre cómo hacerlo;

  1. Lo primero que debe hacer es tener una cuenta de desarrollador de Facebook y luego crear una nueva aplicación.

    Crear aplicación en la Consola de Facebook

  2. Instale Android Studio (>= 3.0) y luego abra/cree un proyecto en el que desee agregar el inicio de sesión de Facebook.
  3. En su proyecto, agregue el siguiente código en sus Gradle Scripts -> build.gradle (Proyecto).

    buildscript{
        repositories {
            jcenter()
        }
    }
  4. Ahora, agregue el siguiente código en Gradle Scripts -> build.gradle (Module:app) con la última versión del SDK de inicio de sesión de Facebook en su proyecto.

    dependencies {
         implementation 'com.facebook.android:facebook-android-sdk:5.0.0'
    }
  5. Sincroniza tu proyecto
  6. Ahora abra la aplicación -> res -> valores -> archivo strings.xml para agregar las siguientes líneas y reemplace [ APP_ID] con su APP_ID, que puede obtener de la consola de desarrolladores de Facebook.

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

  7. Abra la aplicación -> manifiesto -> archivo AndroidManifest.xml y agregue esta línea fuera del elemento de la aplicación.

    <uses-permission android:name="android.permission.INTERNET"/>
  8. Agregue este elemento de metadatos dentro de su elemento de aplicación en el archivo AndroidManifest.xml :

    <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" />
  9. Ahora lo primero que necesita es Key Hash , así que agregue estas líneas en su clase de actividad antes del código de inicio de sesión de Facebook:

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
      
        ... printHashKey();
        ...
    }
      
    ...
      
        public void
        printHashKey()
    {
      
        // Add code to print out the key hash
        try {
      
            PackageInfo info
                = getPackageManager().getPackageInfo(
                    "com.android.facebookloginsample",
                    PackageManager.GET_SIGNATURES);
      
            for (Signature signature : info.signatures) {
      
                MessageDigest md
                    = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:",
                      Base64.encodeToString(
                          md.digest(),
                          Base64.DEFAULT));
            }
        }
      
        catch (PackageManager.NameNotFoundException e) {
        }
      
        catch (NoSuchAlgorithmException e) {
        }
    }
  10. Ahora ejecute su aplicación en su emulador o en su dispositivo conectado . Verá el valor Key Hash impreso en logcat, guárdelo para un requisito posterior.
  11. Vaya a la consola de desarrolladores de Facebook y elija configuración -> Básico -> Agregar plataforma (en la parte inferior de la página) y se abrirá una ventana emergente para seleccionar una plataforma . Elija Android como plataforma.
  12. Agregue el nombre del paquete de su proyecto en ‘Nombre del paquete de Google Play’. Agregue el nombre de la clase donde se implementará el inicio de sesión en el proyecto como ‘LoginActivity’ y también agregue el valor hash clave en ‘Key Hashes’ .

    Página de detalles de inicio de sesión de Android de Facebook

  13. Ahora, de vuelta al estudio de Android, agregue este botón personalizado en su archivo de diseño * .xml :

    <Button
        android:id="@+id/button_facebook"
        style="@style/FacebookLoginButton"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:text="Continue With Facebook"
        android:textAllCaps="false"
        android:textColor="@android:color/white" />
  14. Agregue este código en la aplicación -> res -> archivo styles.xml:

    <style name="FacebookLoginButton">
        <item name="android:textSize">14sp</item>
        <item name="android:background">@drawable/facebook_signin_btn</item>
        <item name="android:paddingTop">11dp</item>
        <item name="android:paddingBottom">11dp</item>
        <item name="android:paddingLeft">15dp</item>
        <item name="android:layout_marginLeft">3dp</item>
        <item name="android:layout_marginRight">3dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_gravity">center_horizontal</item>
    </style>
  15. Puede personalizar este botón en consecuencia o, en lugar de un botón personalizado anterior, puede usar el botón predeterminado de Facebook también como botón de inicio de sesión de Facebook.
  16. Cree un archivo dibujable llamado ‘bg_button_facebook.xml’ en la aplicación -> res -> carpeta dibujable y pegue el siguiente código:

    <?xml version="1.0" encoding="utf-8"?>
    <shape
    android:shape="rectangle">
        <corners android:radius="5dp"/>
        <solid android:color="#3B5998"/>
    </shape>
  17. Ahora inicialice el botón en el archivo *.java y algún código para inicializar el SDK de Facebook también:

    // Declare variables
    private Button mButtonFacebook;
      
    private CallbackManager callbackManager;
    private LoginManager loginManager;
      
    ...
      
        @Override
        protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
      
        ...
      
            mButtonFacebook
            = findViewById(R.id.button_facebook);
        FacebookSdk.sdkInitialize(MainActivity.this);
        callbackManager = CallbackManager.Factory.create();
        facebookLogin();
      
        ...
      
            mButtonFacebook.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    loginManager.logInWithReadPermissions(
                        MainActivity.this,
                        Arrays.asList(
                            "email",
                            "public_profile",
                            "user_birthday"));
                }
            });
        ...
    }
      
    ...
  18. Agregue el método ‘facebookLogin’ fuera de onCreate() en el archivo java. Este es el código para la respuesta de inicio de sesión de Facebook.

    public void facebookLogin()
    {
      
        loginManager
            = LoginManager.getInstance();
        callbackManager
            = CallbackManager.Factory.create();
      
        loginManager
            .registerCallback(
                callbackManager,
                new FacebookCallback<LoginResult>() {
      
                    @Override
                    public void onSuccess(LoginResult loginResult)
                    {
                        GraphRequest request = GraphRequest.newMeRequest(
      
                            loginResult.getAccessToken(),
      
                            new GraphRequest.GraphJSONObjectCallback() {
      
                                @Override
                                public void onCompleted(JSONObject object,
                                                        GraphResponse response)
                                {
      
                                    if (object != null) {
                                        try {
                                            String name = object.getString("name");
                                            String email = object.getString("email");
                                            String fbUserID = object.getString("id");
      
                                            disconnectFromFacebook();
      
                                            // do action after Facebook login success
                                            // or call your API
                                        }
                                        catch (JSONException | NullPointerException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }
                            });
      
                        Bundle parameters = new Bundle();
                        parameters.putString(
                            "fields",
                            "id, name, email, gender, birthday");
                        request.setParameters(parameters);
                        request.executeAsync();
                    }
      
                    @Override
                    public void onCancel()
                    {
                        Log.v("LoginScreen", "---onCancel");
                    }
      
                    @Override
                    public void onError(FacebookException error)
                    {
                        // here write code when get error
                        Log.v("LoginScreen", "----onError: "
                                                 + error.getMessage());
                    }
                });
    }
  19. Ahora agregue otro método requerido ‘disconnectFromFacebook’ para la integración de inicio de sesión, de manera similar agregue esto fuera de onCreate. Esto se usa para desconectar la aplicación de Facebook ya que no es necesario permanecer conectado.

    public void disconnectFromFacebook()
    {
        if (AccessToken.getCurrentAccessToken() == null) {
            return; // already logged out
        }
      
        new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/me/permissions/",
            null,
            HttpMethod.DELETE,
            new GraphRequest
                .Callback() {
                    @Override
                    public void onCompleted(GraphResponse graphResponse)
                    {
                        LoginManager.getInstance().logOut();
                    }
                })
            .executeAsync();
    }
  20. Agregue el método ‘onActivityResult’ fuera de onCreate en la misma actividad:

    @Override
    protected void onActivityResult(int requestCode,
                                    int resultCode,
                                    Intent data)
    {
      
        // add this line
        callbackManager.onActivityResult(
            requestCode,
            resultCode,
            data);
      
        super.onActivityResult(requestCode,
                               resultCode,
                               data);
    }
  21. Ahora ya ha terminado con la codificación. Ejecute su aplicación en su dispositivo o emulador. Ahora puede iniciar sesión con Facebook también en su aplicación.
  22. Si desea cargar su aplicación en Play Store , debe habilitar el ‘estado’ en la sección superior derecha en Facebook para desarrolladores, para esto primero agregue la URL de la política de privacidad en la configuración -> Básico como se indica en la siguiente captura de pantalla. Ahora guarde los cambios y habilite el estado desde el tablero.

    URL de política de privacidad de inicio de sesión de Facebook

Publicación traducida automáticamente

Artículo escrito por NishchalVerma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *