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 así, las personas pueden conceder permiso a la aplicación para obtener información o realizar acciones en Facebook en su nombre.
Para ver un proyecto de ejemplo que ilustra la manera en que se integra el inicio de sesión con Facebook en una aplicación de Android, consulta FBLoginSample en GitHub.
Sigue los pasos que se describen a continuación para agregar el inicio de sesión con Facebook a tu app.
Inicia sesión en Facebook para crear apps o regístrate como desarrollador.
buildscript { repositories {}}
: dependencies{}
para depender de la versión más reciente del SDK de inicio de sesión con Facebook: Si usas la versión 5.15 o posterior del SDK de Facebook para Android, no necesitas agregar un filtro de intent ni de actividad para las pestañas personalizadas de Chrome. Esta funcionalidad está incluida en el SDK.
Después de que integras el inicio de sesión con Facebook, se registran y recopilan automáticamente determinados eventos de la app en el administrador de eventos, a menos que desactives el registro automático de eventos. Para obtener información sobre qué información se recopila y cómo desactivar el registro de eventos de la app de manera automática, consulta Registro automático de eventos de la app.
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 app y token de cliente. Por ejemplo, si tu identificador es 1234
y tu token de cliente es 56789
, tu código se verá de la siguiente manera: /app/manifest/AndroidManifest.xml
. meta-data
al elemento application
del identificador de la app y del token de 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
: Es posible configurar directamente la recopilación automática de eventos de la app en "verdadero" o "falso" si se establece la marca AutoLogAppEventsEnabled
en el archivo AndroidManifest.xml
.
LoginButton
desde el SDK. El permiso LoginButton
es un elemento que incluye la funcionalidad disponible en LoginManager
. Cuando alguien hace clic en el botón, el inicio de sesión se inicia con los permisos configurados en LoginManager
. El inicio de sesión con Facebook requiere el permiso public_profile avanzado, que utilizarán los usuarios externos. El botón sigue el estado del inicio de sesión y muestra el texto correcto según el estado de autenticación de una persona. CallbackManager.Factory.create
. Login button
y registrar una devolución de llamada en tu método onCreate()
u onCreateView()
. Entre las propiedades que puedes personalizar están LoginBehavior
, DefaultAudience
, ToolTipPopup.Style
y los permisos de 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 LoginButton
, no necesitas hacerlo también 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 sea correcto. Puedes optar por seguir los cambios del token de acceso actual con la clase AccessTokenTracker
que se describe más adelante. onActivityResult
, llama a callbackManager.onActivityResult
para pasar el resultado del inicio de sesión a LoginManager
mediante callbackManager
. Si usas actividades o fragmentos de AndroidX, no es necesario que anules "onActivityResult".
onActivityResult
a callbackManager
. LoginManager
establece el AccessToken
y el Profile
actuales para esa persona. El SDK de Facebook guarda estos datos en las preferencias de uso compartido y los configura al principio 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 caché o desde un marcador de aplicación cuando la aplicación se inicia por primera vez. Debes comprobar su validez en Activity
, con el método onCreate
:queries
de tu archivo /app/manifest/AndroidManifest.xml
. En el siguiente código, se muestra cómo activar 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 } });