Compartir en Android

Al integrar el inicio de sesión con Facebook, la opción para compartir en Facebook o Facebook Gaming, 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. Recomendamos que todos los desarrolladores de aplicaciones que usen el inicio de sesión con Facebook, la opción para compartir en Facebook o Facebook Gaming comprendan el funcionamiento de esta característica. 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.

En esta guía se explica el procedimiento para que los usuarios de tu aplicación para Android puedan compartir contenido desde tu aplicación en Facebook. Si alguien comparte contenido desde tu aplicación, dicho contenido aparece en su biografía. El contenido que los usuarios comparten en su biografía también puede aparecer en la sección de noticias de sus amigos. Los usuarios también pueden compartir contenido desde tu aplicación en Facebook Messenger.

Cuando implementes la acción de compartir, tu aplicación no debe rellenar previamente ningún contenido para compartirlo. Rellenar contenido previamente incumple las políticas para desarrolladores.

Las siguientes fotos de ejemplo muestran el cuadro de diálogo de contenido compartido en tu aplicación a la izquierda y la publicación resultante en la aplicación de Facebook a la derecha.

Primeros pasos con el contenido compartido

El SDK de contenido compartido para Android es un componente del SDK de Facebook para Android.

Para usar el SDK de contenido compartido de Facebook en tu proyecto, establécelo como una dependencia en Maven.

  1. En tu proyecto, abre tu_aplicación | Gradle Scripts | build.gradle (proyecto) y añade el siguiente repositorio a la sección buildscript { repositories {}}:

    mavenCentral() 
    
  2. En tu proyecto, abre tu_aplicación | Gradle Scripts | build.gradle (Module: app) y añade la declaración de compilación a la sección dependencies{}:

    compile 'com.facebook.android:facebook-share:latest.release'
    
  3. Compila el proyecto.

  4. Obtén el identificador de la aplicación de Facebook debidamente configurado y enlazado a tu aplicación para Android.

  5. Genera un hash de clave de desarrollo y añádelo a la página Aplicaciones de muestra en la configuración para desarrolladores. Para obtener más información, consulta los temas sobre cómo crear un hash de clave de desarrollo y ejecutar aplicaciones de muestra.

  6. Añade un objeto ContentProvider al archivo AndroidManifest.xml y establece {APP_ID} en tu identificador de la aplicación:

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. Si tu aplicación es para Android 11 o una versión posterior, añade el siguiente bloque de consultas al archivo AndroidManifest.xml para que la aplicación de Facebook sea visible para tu aplicación:

    <queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
  8. Añade un objeto Facebook Activity a tu proyecto e inclúyelo en el archivo AndroidManifest.xml.

Modelar contenido

La versión 4.0 y posteriores de los SDK de Facebook incluyen nuevos modelos para compartir contenido. Cada tipo de contenido que se quiere compartir tiene una clase que puedes utilizar para representarlo. Una vez que modeles el contenido, añade una interfaz para compartir a tu aplicación.

Cuando se comparten enlaces de tu aplicación en Facebook, se incluye un elemento contentURL con el enlace correspondiente. Crea contenido para compartir con los enlaces en el modelo ShareLinkContent. Para obtener una lista de todos los atributos, consulta la referencia de ShareLinkContent.

A continuación encontrarás un ejemplo de cómo activar el contenido compartido:

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

Para obtener una vista previa del contenido compartido con un enlace a Google Play o App Store, introduce la URL en el depurador de contenido compartido.

Si el contenido compartido desde tu aplicación incluye un enlace a cualquier aplicación en Google Play o App Store, se ignorarán la descripción y la imagen incluidas en dicho contenido. En su lugar, extraeremos directamente de la tienda correspondiente el título y la imagen de la aplicación (si no hay imagen disponible, no se incluirá ninguna en el contenido compartido).

Fotos

Las personas que usan tu aplicación pueden compartir fotos en Facebook con el cuadro de diálogo de contenido compartido. Para compartir contenido, tienen que tener instalada la aplicación nativa de Facebook para Android (versión 7.0 o posterior).

Crea contenido para compartir con las fotos en el modelo SharePhotoContent. Para obtener una lista de todos los atributos, consulta la referencia de SharePhotoContent.

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

Vídeos

Las personas que usan tu aplicación pueden compartir vídeos en Facebook con el cuadro de diálogo de contenido compartido.

Crea contenido para compartir con los vídeos en el modelo ShareVideoContent. Para obtener una lista de todos los atributos, consulta la referencia de ShareVideoContent.

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

Elementos multimedia

Las personas que usan tu aplicación pueden compartir una combinación de fotos y vídeos en Facebook mediante el cuadro de diálogo de contenido compartido. Ten en cuenta lo siguiente:

  • Es necesario tener instalada la aplicación nativa de Facebook para Android (versión 71 o posterior).
  • Se pueden compartir a la vez un máximo de seis fotos y vídeos.

Crea contenido multimedia para compartir con el modelo ShareMediaContent. Para obtener una lista de todos los atributos, consulta la referencia de ShareMediaContent.

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

Añadir interfaces para compartir

Después de crear un modelo para gestionar el contenido, activa una interfaz para compartir contenido de Facebook.

Botones

Facebook ofrece botones nativos para activar la función de compartir en Android.


Botón “Compartir”

El botón “Compartir” llamará a un cuadro de diálogo de contenido compartido. Para añadir un botón “Compartir”, incorpora el siguiente fragmento de código a tu vista:

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

Cuadro de diálogo de contenido compartido

El cuadro de diálogo de contenido compartido cambia a la aplicación de Facebook nativa para Android y le devuelve el control a tu aplicación una vez realizada la publicación. En función del SDK que uses, es posible que las personas tengan que tocar el icono de la flecha hacia atrás para volver a tu aplicación. Si la aplicación de Facebook no está instalada, el cuadro de diálogo de contenido compartido recurrirá automáticamente al cuadro de diálogo basado en web.

ShareDialog.show(activityOrFragment, content);

Por ejemplo, para mostrar el objeto ShareDialog y obtener un enlace en tu actividad, crea una instancia de ShareDialog en el método onCreate:

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });
    }

A continuación, muestra el objeto ShareDialog:

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

Por último, llama al objeto callbackManager del SDK en onActivityResult para gestionar la respuesta:

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

Si utilizas actividades o fragmentos de AndroidX, no tienes que invalidar el objeto onActivityResult.

Cuadro de diálogo de mensajes

El cuadro de diálogo de mensajes cambia a la aplicación de Messenger nativa para Android y le devuelve el control a tu aplicación una vez realizada la publicación. En función del SDK que uses, es posible que las personas tengan que tocar el icono de la flecha hacia atrás para volver a tu aplicación.

MessageDialog.show(activityOrFragment, content);

Hashtags

Puedes especificar un solo hashtag para que aparezca con la foto, el enlace o el vídeo que compartas. Este hashtag también aparece en el cuadro de diálogo de contenido compartido, aunque existe la opción de eliminarlo antes de publicar.

A continuación, se muestra un ejemplo de cómo añadir un hashtag al contenido compartido con un enlace.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

Temas avanzados

Cuadros de diálogo de reserva integrados

En versiones anteriores del SDK de Facebook para Android, tu aplicación tenía que comprobar si había instalada una aplicación de Facebook nativa para poder abrir el cuadro de diálogo de contenido compartido. Si la persona en cuestión no tenía descargada la aplicación, tenías que proporcionar tu propio código para llamar al cuadro de diálogo de reserva.

Ahora el SDK comprueba automáticamente si la aplicación nativa de Facebook está descargada. Si no lo está, el SDK cambia al navegador predeterminado del usuario y abre el cuadro de diálogo para publicar en feed.

App Links permite crear un enlace a tu aplicación desde las publicaciones de Facebook que se hayan realizado en ella. Cuando las personas hagan clic en una publicación de Facebook realizada desde tu aplicación, se abrirá la aplicación e incluso podrás crear enlaces a contenido concreto dentro de ella.