Primeros pasos con el SDK de Facebook para Android

Este documento describe cómo empezar a integrar tu app para Android con Facebook mediante el SDK de Facebook para Android. La versión actual del SDK de Facebook para Android es la 12.0.0 y requiere de la API de Android 15. Para obtener más información sobre las versiones y las funciones, consulta SDK de Facebook para Android.

Cuando usas el SDK de Facebook, algunos eventos en tu aplicación se registran y recopilan automáticamente para Facebook Analytics, a menos que desactives automáticamente el registro de eventos. Para obtener información sobre qué información se recopila y cómo desactivar el registro de eventos de manera automática, consulta Registro automático de eventos de la aplicación.

Puedes configurar tu app para usar el SDK de Facebook para Android de las siguientes maneras:

  • Usar el inicio rápido.
  • Configurar el proyecto con el SDK de Facebook para Android.

Inicio rápido

Para obtener un identificador de la app de Facebook, establecer la configuración de la app e importar el SDK de Facebook para Android, haz clic en el botón que aparece abajo y sigue las instrucciones.

Inicio rápido en Android

Comprender el permiso del identificador de publicidad

A partir de la versión 13.0.0, todas las apps que se crean mediante el SDK de Facebook para Android agregan de manera automática el permiso del identificador de publicidad. Para obtener más información, consulta Identificador de publicidad: ayuda de la consola de juego.

Según el caso, es posible que no desees incluir el permiso del identificador de publicidad en la app. Por ejemplo, si los clientes de la app son niños o familias, es posible que el permiso del identificador de publicidad no sea relevante. Sigue las instrucciones que se indican más adelante en este documento para excluir el permiso del identificador de publicidad.

Configuración de Android Studio

Crea tu proyecto

Para usar el SDK de Facebook en un proyecto de Android Studio, agrégalo como dependencia de compilación e impórtalo.

  1. Ve a Android Studio | Nuevo proyecto | SDK mínimo.

  2. Selecciona la API 15: Android 4.0.3 (IceCreamSandwich) o una superior y crea el nuevo proyecto.

  3. Abre el archivo Gradle Scripts | build.gradle (Project: <your_project>) y agregar lo siguiente:

    mavenCentral()
    
  4. Guarda el archivo build.gradle (Project: <your_project>) y ciérralo.

  5. Abre el archivo Gradle Scripts | build.gradle (Module: app) y agrega la siguiente información a la sección dependencies:

    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    

  6. Guarda el archivo build.gradle (Module: app) y ciérralo.

  7. Crea tu proyecto. Ahora, puedes importar com.facebook.FacebookSdk a la app.

Actualiza tu manifiesto

Agrega el identificador de la app y el token de cliente al archivo de cadena del proyecto y actualiza el archivo de manifiesto. Realiza los siguientes pasos:

  1. Abre el archivo /app/res/values/strings.xml en el proyecto de la app.

  2. Agrega los elementos string con los nombres facebook_app_id 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:

    <string name="facebook_app_id">1234</string><string name="facebook_client_token">56789</string>
  3. Abre el archivo /app/manifests/AndroidManifest.xml en el proyecto de la app.

  4. Agrega los elementos meta-data al elemento application del identificador de la app y del token de cliente:

    <application android:label="&#064;string/app_name" ...>
        ...
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/><meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
  5. Agrega el elemento uses-permission al manifiesto después del elemento application:

    <uses-permission android:name="android.permission.INTERNET"/>
  6. (Opcional) Para dar de baja el permiso de identificador de publicidad, agrega un elemento uses-permission al manifiesto después del elemento application:

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
  7. Crea tu proyecto.

Activar el contenido compartido

Si compartes enlaces, imágenes o videos desde tu app, declara la autoridad FacebookContentProvider en el manifiesto. Realiza los siguientes pasos:

  1. Abre el archivo /app/manifests/AndroidManifest.xml en el proyecto de la app.

  2. Agrega un elemento provider al manifiesto de la autoridad FacebookContentProvider. Agrega el identificador de la app al final del valor authorities. Por ejemplo, si el identificador de la app es 1234, la declaración se verá de la siguiente manera:

    <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
    
  3. Crea tu proyecto.

Ejecutar apps de ejemplo

Se incluyen los siguientes ejemplos con el SDK de Facebook para Android:

Puedes experimentar con los ejemplos si importas el SDK de Facebook en un proyecto de Android Studio. Los ejemplos tienden a tener una dependencia al proyecto en vez de una dependencia al repositorio central mediante "mavenCentral" o "jcenter". De esta manera, si una copia local del SDK se actualiza, los ejemplos reflejan esos cambios.

Para ejecutar apps de ejemplo de manera rápida, puedes generar hashes de clave para los entornos de desarrollo. Agrega estos hashes a el perfil de desarrollador de Facebook de estas apps de ejemplo. El kit de desarrollo de Java SE (JDK) que se instaló cuando se configuró el entorno de desarrollo incluye Keytool, una herramienta para generar hashes de clave. En OpenSSL, puedes descargar la herramienta.

En OS X, ejecuta lo siguiente:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

En Windows, es necesario realizar lo siguiente:

Ejecuta el siguiente comando en una línea de comando en la carpeta del SDK de Java. Se generará una cadena de 28 caracteres.

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

Ve al sitio de Facebook Developer. Inicia sesión en Facebook y ve a la opción Configuración para desarrolladores ubicada en el menú desplegable de la derecha:

En la configuración de desarrollador, selecciona app de ejemplo en el menú, y, luego, agrega y guarda los hashes de clave en tu perfil:

Puedes agregar varios hashes de clave si desarrollas varias máquinas.

Ahora puedes compilar y ejecutar todos los ejemplos, incluso aquellos que usan el inicio de sesión con Facebook.

Generar un hash de clave de desarrollo

Facebook usa el hash de clave para autenticar interacciones entre la app y la app de Facebook. Si ejecutas apps que usan el inicio de sesión con Facebook, es necesario que agregues el hash de clave de desarrollo de Android a tu perfil de desarrollador de Facebook.

También debes generar y establecer una hash de clave de activación para la versión de la app que lances para ti mismo.

En OS X o Windows, puedes crear un hash de clave cuando lo generas o usando el valor que devuelve Settings.getApplicationSignature(Context). Consulta Ejecutar apps de ejemplo para obtener instrucciones.

Crear un hash de clave de activación

Con el fin de autenticar el intercambio de información entre la app y Facebook, es necesario que generes un hash de clave de activación y que lo agregues a la configuración de Android dentro del identificador de la app de Facebook. De no hacerlo, es posible que la integración con Facebook no funcione adecuadamente cuando publiques tu app en la tienda.

Es necesario que, en un paso anterior, actualices la configuración de desarrollador de Facebook con los hashes de clave de tus entornos de desarrollo.

Al momento de publicarla, la app tendrá, por lo general, una firma diferente de la del entorno de desarrollo. Por este motivo, es necesario que te asegures de crear un hash de clave de activación y que lo agregues a la configuración de Android del identificador de la app de Facebook.

Para generar un hash de tu clave de activación, ejecuta el siguiente comando en Mac o Windows y reemplaza el alias de la clave de activación y la ruta del almacén de claves.

En MAC OS, ejecuta lo siguiente:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

En Windows, es necesario realizar lo siguiente:

Ejecuta el siguiente comando en una línea de comando en la carpeta del SDK de Java:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

Asegúrate de usar la contraseña que estableciste la primera vez que creaste la clave de activación.

Este comando generará una cadena de 28 caracteres. Copia y pega este hash de clave de activación en la configuración de Android de tu identificador de la app de Facebook.

Es necesario que también verifiques que la configuración de Android del identificador de la app de Facebook contenga la clase de actividad principal y el nombre de paquete correctos para el paquete de Android.

Usar el SDK de Facebook para Android con Maven

Puedes declarar la dependencia a Maven con la última versión disponible del SDK de Facebook para Android.

<dependency>
  <groupId>com.facebook.android</groupId>
  <artifactId>facebook-android-sdk</artifactId>
  <version>PUT_LATEST_VERSION_HERE</version>
</dependency> 

Solución de problemas de las apps de ejemplo

Si tienes un problema cuando ejecutas una app de ejemplo, es posible que esté asociado al hash de clave. Puedes encontrarte alguna de las siguientes situaciones:

  • Aparece un cuadro de diálogo de inicio de sesión nativo, pero el estado muestra que tu sesión está cerrada después de aceptar los permisos. El logcat contiene una excepción:
12-20 10:23:24.507: W/fb4a:fb:OrcaServiceQueue(504):
com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
  • Aparece un cuadro de diálogo de inicio de sesión no nativo con un mensaje de error que indica que la app no está configurada correctamente para el inicio de sesión con Facebook.

Verifica tu hash de clave y asegúrate de usar el correcto. I

También puedes modificar el código de ejemplo de manera manual para usar el hash de clave indicado. Por ejemplo, haz un cambio temporario en onCreate() en la clase HelloFacebookSampleActivity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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 (NameNotFoundException e) {
        
    } catch (NoSuchAlgorithmException e) {
        
    }
    
    ...

Guarda los cambios y vuelve a ejecutar el ejemplo. Verifica en el resultado del logcat un mensaje similar al que se describe a continuación:

12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

Guarda el hash de clave en el perfil de desarrollador. Vuelve a ejecutar los ejemplos y cerciórate de poder iniciar sesión correctamente.