Buscar..


Sintaxis

  • newInstance : para crear una instancia única de la clase de ayuda de Facebook.
  • loginUser : Para iniciar sesión usuario.
  • SignOut : Para cerrar la sesión del usuario.
  • getCallbackManager : para obtener devolución de llamada para Facebook.
  • getLoginCallback : para obtener devolución de llamada para inicio de sesión.
  • getKeyHash : Para generar Hash clave de Facebook.

Parámetros

Parámetro Detalles
ETIQUETA Una cadena utilizada durante el registro
FacebookSignInHelper Una referencia estática a facebook helper
CallbackManager Una devolución de llamada para las operaciones de facebook
Actividad Un contexto
PERMISO_LOGIN Una matriz que contiene todos los permisos requeridos de facebook para iniciar sesión.
loginCallback Una devolución de llamada para el inicio de sesión de facebook

Cómo agregar Facebook Login en Android

Agregue debajo las dependencias a su build.gradle

  // Facebook login
    compile 'com.facebook.android:facebook-android-sdk:4.21.1'

Agregue la siguiente clase de ayuda a su paquete de utilidades:

/**
 * Created by Andy
 * An utility for Facebook
 */
public class FacebookSignInHelper {
    private static final String TAG = FacebookSignInHelper.class.getSimpleName();
    private static FacebookSignInHelper facebookSignInHelper = null;
    private CallbackManager callbackManager;
    private Activity mActivity;
    private static final Collection<String> PERMISSION_LOGIN = (Collection<String>) Arrays.asList("public_profile", "user_friends","email");
    private FacebookCallback<LoginResult> loginCallback;



    public static FacebookSignInHelper newInstance(Activity context) {
        if (facebookSignInHelper == null)
            facebookSignInHelper = new FacebookSignInHelper(context);
        return facebookSignInHelper;
    }


    public FacebookSignInHelper(Activity mActivity) {
        try {
            this.mActivity = mActivity;
            // Initialize the SDK before executing any other operations,
            // especially, if you're using Facebook UI elements.
            FacebookSdk.sdkInitialize(this.mActivity);
            callbackManager = CallbackManager.Factory.create();
            loginCallback = new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                   // You are logged into Facebook
                }

                @Override
                public void onCancel() {
                    Log.d(TAG, "Facebook: Cancelled by user");
                }

                @Override
                public void onError(FacebookException error) {
                    Log.d(TAG, "FacebookException: " + error.getMessage());
                }
            };
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * To login user on facebook without default Facebook button
     */
    public void loginUser() {
        try {
            LoginManager.getInstance().registerCallback(callbackManager, loginCallback);
            LoginManager.getInstance().logInWithReadPermissions(this.mActivity, PERMISSION_LOGIN);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    /**
     * To log out user from facebook
     */
    public void signOut() {
        // Facebook sign out
        LoginManager.getInstance().logOut();
    }

    public CallbackManager getCallbackManager() {
        return callbackManager;
    }

    public FacebookCallback<LoginResult> getLoginCallback() {
        return loginCallback;
    }

    /**
     * Attempts to log debug key hash for facebook
     *
     * @param context : A reference to context
     * @return : A facebook debug key hash
     */
    public static String getKeyHash(Context context) {
        String keyHash = null;
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(
                    context.getPackageName(),
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                keyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.d(TAG, "KeyHash:" + keyHash);
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return keyHash;
    }
}

Agregue el siguiente código en su actividad:

FacebookSignInHelper facebookSignInHelper = FacebookSignInHelper.newInstance(LoginActivity.this, fireBaseAuthHelper);
facebookSignInHelper.loginUser();

Agregue el siguiente código a su OnActivityResult :

 facebookSignInHelper.getCallbackManager().onActivityResult(requestCode, resultCode, data);

Configuración de permisos para acceder a los datos desde el perfil de Facebook

Si desea recuperar los detalles del perfil de Facebook de un usuario, necesita establecer permisos para el mismo:

loginButton = (LoginButton)findViewById(R.id.login_button);

loginButton.setReadPermissions(Arrays.asList("email", "user_about_me"));

Puede seguir agregando más permisos, como listas de amigos, publicaciones, fotos, etc. Simplemente elija el permiso correcto y agréguelo a la lista anterior.

Nota: no es necesario establecer ningún permiso explícito para acceder al perfil público (nombre, apellido, ID, género, etc.).

Crea tu propio botón personalizado para iniciar sesión en Facebook

Una vez que agregas el inicio de sesión / registro en Facebook, el botón se ve algo así como:

introduzca la descripción de la imagen aquí

La mayoría de las veces, no coincide con las especificaciones de diseño de su aplicación. Y así es como puedes personalizarlo:

<FrameLayout
    android:layout_below="@+id/no_network_bar"
    android:id="@+id/FrameLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <Button
        android:background="#3B5998"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:id="@+id/fb"
        android:onClick="onClickFacebookButton"
        android:textAllCaps="false"
        android:text="Sign up with Facebook"
        android:textSize="22sp"
        android:textColor="#ffffff" />
</FrameLayout>

Simplemente envuelva el com.facebook.login.widget.LoginButton original en un FrameLayout y haga que su visibilidad desaparezca.

A continuación, agregue su botón personalizado en el mismo FrameLayout . He añadido algunas especificaciones de muestra. Siempre puedes crear tu propio fondo dibujable para el botón de Facebook y establecerlo como fondo del botón.

Lo último que hacemos es simplemente convertir el clic en mi botón personalizado en un clic en el botón de Facebook:

//The original Facebook button
LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);

//Our custom Facebook button
fb = (Button) findViewById(R.id.fb);

public void onClickFacebookButton(View view) {
    if (view == fb) {
        loginButton.performClick();
    }
}

¡Genial! Ahora el botón se ve algo así:

introduzca la descripción de la imagen aquí

Una guía minimalista para la implementación de inicio de sesión / registro en Facebook.

  1. Tienes que configurar los requisitos previos .

  2. Agrega la actividad de Facebook al archivo AndroidManifest.xml :

    <activity 
        android:name="com.facebook.FacebookActivity"
        android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />
    
  3. Agregue el botón de inicio de sesión a su 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" />   
    
  4. Ahora tienes el botón de Facebook. Si el usuario hace clic en él, el cuadro de diálogo de inicio de sesión de Facebook aparecerá en la parte superior de la pantalla de la aplicación. Aquí el usuario puede completar sus credenciales y presionar el botón Iniciar sesión . Si las credenciales son correctas, el cuadro de diálogo concede los permisos correspondientes y se envía una devolución de llamada a su actividad original que contiene el botón. El siguiente código muestra cómo puede recibir esa devolución de llamada:

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // Completed without error. You might want to use the retrieved data here.
        }
    
        @Override
        public void onCancel() {
            // The user either cancelled the Facebook login process or didn't authorize the app.
        }
    
        @Override
        public void onError(FacebookException exception) {
            // The dialog was closed with an error. The exception will help you recognize what exactly went wrong.
        }
    });  
    

Cerrar sesión de Facebook

Facebook SDK 4.0 en adelante, así es como cerramos la sesión:

com.facebook.login.LoginManager.getInstance().logOut();

Para las versiones anteriores a 4.0, el cierre de sesión se borra explícitamente el token de acceso:

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow