Uso compartido en Android

En esta guía se detalla cómo activar el uso compartido en Facebook desde tu aplicación para Android. Si alguien comparte contenido desde tu aplicación, dicho contenido aparecerá en su biografía y, quizás, en la sección de noticias de sus amigos.

Las personas también pueden compartir contenido desde tu aplicación en Facebook Messenger.

Requisitos previos

Antes de que puedas compartir contenido a Facebook desde la aplicación, debes vincular o descargar el SDK de Facebook para compartir contenido en Android.

El SDK para compartir contenido en Android es un componente del SDK de Facebook para Android. Para usar el SDK para compartir contenido en Android en tu proyecto, puedes descargarlo o establecerlo como dependencia en Maven. Elige el método que prefieras con este botón.

Vincular el SDK con Maven

  1. En el proyecto, abre tu_aplicación | Gradle Scripts | build.gradle (Project) y agrega el siguiente repositorio a la sección buildscript { repositories {}} para descargar el SDK del repositorio central de Maven:
    mavenCentral() 
  2. En el proyecto, abre tu_aplicación | Gradle Scripts | build.gradle (module: app) y agrega la siguiente instrucción de compilación a la sección dependencies{} para compilar la versión más reciente del SDK:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. Crea tu proyecto.

Descargar el SDK

Haz clic en el siguiente botón para descargar el SDK.

Descarga el SDK

Cuando usas el SDK de Facebook para compartir contenido, los eventos en la 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.

Requisitos previos adicionales

Además, debes hacer lo siguiente:

Para obtener información detallada sobre estos requisitos, consulta Primeros pasos con el SDK para Android.

También tienes que configurar ContentProvider en tu AndroidManifest.xml, donde {APP_ID} es el identificador de la aplicación:

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

Cuando implementes el uso compartido, tu aplicación no debe completar previamente el contenido que se va a compartir. Esta práctica contraviene la sección 2.3 de la Política de la plataforma de Facebook.

Modelar contenido

La versión 4.0 y las versiones 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, agrega una interfaz para compartir a tu aplicación.

Cuando se comparten enlaces desde tu aplicación en Facebook, se incluye una contentURL con el enlace para compartir. Crea el contenido para compartir para los enlaces mediante el modelo ShareLinkContent. Puedes consultar la lista completa de atributos en la referencia de ShareLinkContent.

A partir del 18 de abril de 2017, la API Graph versión 2.9 o posterior, no admitirá los siguientes parámetros. Seguirán funcionando para las versiones 2.8 o anteriores hasta el 17 de julio de 2017.

  • a contentTitle: representa el título del contenido del enlace
  • a imageURL: URL de la imagen en miniatura que aparecerá en la publicación
  • a contentDescription: descripción del contenido, normalmente entre dos y cuatro oraciones

A continuación, figura un ejemplo de cómo puedes desencadenar la función de compartir:

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

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

Si el contenido compartido de tu aplicación contiene un enlace a alguna aplicación en Google Play o la App Store, se ignorarán la descripción y la imagen incluidas en él. En cambio, extraeremos la imagen y el título de la aplicación de la tienda directamente (en caso de que no haya una imagen, el contenido compartido no incluirá una).

Fotos

Las personas pueden compartir fotos en Facebook desde tu aplicación mediante el cuadro de diálogo de contenido compartido o mediante una interfaz personalizada.

  • El tamaño de las fotos debe ser inferior a 12 MB.
  • Es necesario tener instalada la aplicación de Facebook nativa para Android (versión 7.0 o posterior).

Crea el contenido para compartir fotos mediante el modelo SharePhotoContent. Puedes consultar la lista completa de atributos en la referencia de SharePhotoContent.

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

Videos

Las personas de tu aplicación pueden compartir videos en Facebook mediante el cuadro de diálogo de contenido compartido o mediante tu propia interfaz personalizada.

El tamaño de los videos debe ser inferior a 12 MB.

Crea el contenido para compartir videos mediante el modelo ShareVideoContent. Puedes consultar la lista completa de atributos en la referencia de ShareVideoContent.

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

Contenido multimedia

Las personas pueden compartir en Facebook una combinación de fotos y videos desde tu aplicación, mediante el cuadro de diálogo de contenido compartido. Ten en cuenta lo siguiente:

  • Es necesario tener instalada la aplicación de Facebook nativa para Android (versión 71 o posterior).
  • El tamaño de las fotos debe ser inferior a 12 MB.
  • El tamaño de los videos debe ser inferior a 12 MB.
  • Se puede compartir un máximo de seis fotos y videos cada vez.

Crea tu contenido multimedia para compartir con el modelo ShareMediaContent. Puedes consultar la lista completa de atributos en 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);

Agregar interfaces para compartir

Una vez que crees un modelo para administrar tu contenido, puedes activar una interfaz para compartir de Facebook o crear una propia que llame a la API Graph.

Botones

Facebook ofrece botones nativos para activar el uso compartido en Android.


Con el lanzamiento de la versión 4.28.0 del SDK de Facebook para Android, el botón "Me gusta" para este sistema operativo quedó obsoleto. Se admitirá hasta el 5 de febrero de 2018.

Botón "Me gusta"

El botón "Me gusta" permite a las personas compartir contenido con sus amigos de forma rápida. Para indicar que le gusta un contenido determinado de tu aplicación y compartirlo en Facebook, bastará con tocar el botón "Me gusta". Las personas pueden utilizar el botón "Me gusta" para indicar que les gusta una página de Facebook o cualquier objeto de Open Graph. Puede hacerse referencia a este botón mediante una URL o un identificador. Para incluir un botón "Me gusta", agrega el siguiente fragmento de código a tu vista:

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

Botón "Compartir"

El botón "Compartir" llama a un cuadro de diálogo de contenido compartido. Para incluir un botón "Compartir", agrega el siguiente fragmento de código a tu vista:

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

Con el lanzamiento de la versión 4.28.0 del SDK de Facebook, el botón "Me gusta" quedó obsoleto. Se admitirá hasta el 5 de febrero de 2018.

Botón "Enviar"

El botón "Enviar" permite a los usuarios enviar fotos, videos y enlaces en privado a sus amigos y contactos mediante Facebook Messenger. El botón "Enviar" llama a un cuadro de diálogo de mensajes. Para incluir un botón "Enviar" a tu vista, agrégale el siguiente fragmento de código:

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

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 una publicación. Según el SDK que uses, es posible que las personas deban tocar el icono con la flecha hacia atrás para regresar a la aplicación. Si no está instalada la aplicación de Facebook, 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 ShareDialog para un enlace de tu actividad, crea una instancia ShareDialog en tu 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 cuadro de diálogo de contenido compartido:

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 a callbackManager del SDK en onActivityResult para administrar 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);
}

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 una publicación. Según el SDK que uses, es posible que las personas deban tocar el icono con la flecha hacia atrás para regresar a la aplicación.

MessageDialog.show(activityOrFragment, content);

Otras funciones

Si utilizas el cuadro de diálogo de contenido compartido de Facebook, tendrás otras opciones que no están disponibles al compartir mediante la API.

Hashtags

Puedes especificar un solo hashtag para que aparezca con una foto, un enlace o un video que compartes. Este hashtag también aparece en el cuadro de diálogo de contenido compartido, pero es posible eliminarlo antes de publicar.

A continuación, verás un ejemplo de cómo agregar un hashtag a un contenido compartido mediante enlace.

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

Compartir citas

Puedes permitir que otras personas destaquen texto para que aparezca en forma de cita con un enlace compartido. También puedes predefinir una cita (por ejemplo, una cita destacada en un artículo) para que aparezca con el enlace compartido. Sea cual fuere el caso, la cita aparece en un campo distinto de los comentarios del usuario.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

Temas avanzados

Cuadros de diálogo de reserva integrados para el uso compartido

En versiones anteriores del SDK para Android, tu aplicación tenía que comprobar si estaba instalada una aplicación de Facebook nativa antes de abrir el cuadro de diálogo de contenido compartido. Si la persona en cuestión no tenía instalada 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 está instalada la aplicación de Facebook nativa. De no ser así, el SDK desvía a las personas a su navegador predeterminado y abre el cuadro de diálogo de noticias. Si alguien quiere compartir una historia de Open Graph, el SDK abre el cuadro de diálogo de contenido compartido para web.

App Links te permite enlazar de vuelta a tu aplicación desde publicaciones de Facebook realizadas desde esta. Cuando las personas hagan clic en una publicación de Facebook realizada desde tu aplicación, se abrirá la aplicación y podrás, incluso, enlazar a un contenido concreto dentro de ella.

Interfaz personalizada

Si quieres utilizar tu propia interfaz para compartir, debes:

A continuación, figura el código para publicar un enlace en Facebook desde tu propia interfaz:

ShareApi.share(content, null);

Compartir historias de Open Graph

Las historias de Open Graph permiten compartir contenido atractivo y estructurado a través de una API fuertemente tipada, mediante acciones y objetos de Open Graph. Estas publicaciones enlazan de vuelta a tu aplicación o a su página en la App Store.

Para obtener más información sobre cómo configurar historias de Open Graph, consulta Historias de Open Graph en Android.

Crea el contenido para compartir para acciones de Open Graph mediante el modelo ShareOpenGraphContent. Puedes consultar la lista completa de atributos en la referencia de ShareOpenGraphContent.

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();