Android
Facebook SDK para Android
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:
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í:
Una guía minimalista para la implementación de inicio de sesión / registro en Facebook.
Tienes que configurar los requisitos previos .
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" />
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" />
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();