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, pueden conceder a la aplicación permisos para recuperar información o realizar acciones en Facebook en su nombre.
Para obtener un proyecto de ejemplo que ilustre cómo integrar el inicio de sesión con Facebook en una aplicación para Android, accede a FBLoginSample en GitHub.
Sigue los pasos que se describen a continuación para añadir el inicio de sesión con Facebook a tu aplicación.
Entra en Facebook para crear aplicaciones o regístrate como desarrollador.
buildscript { repositories {}}
: dependencies{}
para que dependa de la versión más reciente del SDK de inicio de sesión con Facebook: 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.
Al integrar el inicio de sesión con Facebook, determinados eventos de la aplicación se registran y recopilan automáticamente para el Administrador de eventos, a menos que desactives el registro automático de eventos de la aplicación. Para obtener información más detallada sobre los datos que se recopilan y cómo desactivar el registro automático de eventos de la aplicación, consulta Registro automático de eventos de la aplicación.
FacebookActivity
a tu manifiesto de Android. /app/res/values/strings.xml
.string
con los nombres facebook_app_id
, fb_login_protocol_scheme
y facebook_client_token
, y establece los valores de tu identificador de la aplicación e identificador de acceso del cliente. Por ejemplo, si tu identificador de la aplicación es 1234
y tu identificador de acceso del cliente es 56789
, el código tendrá un aspecto similar al siguiente: /app/manifest/AndroidManifest.xml
. meta-data
al elemento application
para tu identificador de la aplicación e identificador de acceso del cliente: application
: <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>
uses-permission
al manifiesto después del elemento application
: uses-permission
al manifiesto después del elemento application
: Para establecer directamente el registro automático de eventos de la aplicación en “true” o “false”, puedes definir la marca AutoLogAppEventsEnabled
en el archivo AndroidManifest.xml
.
LoginButton
desde el SDK. LoginButton
es un elemento de la interfaz de usuario que incluye la funcionalidad disponible en LoginManager
. Al hacer clic en el botón, se inicia el inicio de sesión con los permisos establecidos en LoginManager
. El inicio de sesión con Facebook requiere que los usuarios externos utilicen el permiso avanzado public_profile. El botón realiza un seguimiento del estado del inicio de sesión y muestra el texto correcto en función del estado de autenticación del usuario. CallbackManager.Factory.create
para crear un objeto callbackManager que gestione las respuestas del inicio de sesión. Login button
y registrar una devolución de llamada en los métodos onCreate()
u onCreateView()
. Entre las propiedades que puedes personalizar se incluyen LoginBehavior
, DefaultAudience
, ToolTipPopup.Style
y los permisos del objeto LoginButton
. Por ejemplo: private static final String EMAIL = "email"; loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions(Arrays.asList(EMAIL)); // If you are using in a fragment, call 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 } });
LoginManager
o LoginButton
. Si registras la devolución de llamada con el objeto LoginButton
, no es necesario registrarla en el administrador de inicio de sesión. 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 } });
LoginResult
tendrá el nuevo objeto AccessToken
y los permisos concedidos o rechazados más recientemente. registerCallback
para que el inicio de sesión se realice correctamente. Puedes optar por seguir los cambios del identificador de acceso actual con la clase AccessTokenTracker
que se describe a continuación. onActivityResult
, llama a callbackManager.onActivityResult
para pasar los resultados del inicio de sesión al objeto LoginManager
mediante callbackManager
. Si utilizas fragmentos o actividades de AndroidX, no tienes que invalidar el objeto onActivityResult.
onActivityResult
a callbackManager
. 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()
. 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
:queries
de tu archivo /app/manifest/AndroidManifest.xml
. En el siguiente código se muestra cómo habilitar el inicio de sesión rápido: 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 } });