Compartir en Android

En esta guía se detalla cómo activar la función para compartir contenido 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 en Facebook desde la aplicación, debes vincular o descargar el SDK de contenido compartido de Facebook para Android.

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, puedes descargarlo o establecerlo como dependencia en Maven. Elige el método que prefieras mediante el siguiente botón.

Vincular el SDK con Maven

  1. En tu proyecto, abre your_app | Gradle Scripts | build.gradle (proyecto) y añade el siguiente repositorio a la sección buildscript { repositories {}} para descargar el SDK de Maven Central Repository:
    mavenCentral() 
  2. En el proyecto, abre tu_aplicación | Gradle Scripts | build.gradle (module: app) y añade 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. Compila el proyecto.

Descargar SDK

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

Descargar el SDK

Cuando usas el SDK de contenido compartido de Facebook, 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. Si quieres obtener información más detallada sobre los datos recopilados y cómo desactivar el registro automático de eventos, consulta el apartado sobre el 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 la guía de introducción Primeros pasos con el SDK para Android.

También tienes que configurar una clase ContentProvider en el archivo 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 la acción de compartir, tu aplicación no debe rellenar 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 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 desde tu aplicación en Facebook, se incluye un elemento contentURL con el enlace correspondiente. Crea el contenido para compartir enlaces mediante el modelo ShareLinkContent. Puedes consultar la lista completa de atributos en la referencia de la clase ShareLinkContent.

A partir del 18 de abril de 2017, los siguientes parámetros dejarán de ser compatibles con la versión 2.9 o posteriores de la API Graph. En el caso de versiones anteriores, los parámetros se podrán seguir utilizando hasta el 17 de julio de 2017.

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

A continuación figura un ejemplo de cómo puedes activar la función para compartir:

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

Para obtener una vista previa del enlace compartido en Google Play o App Store, especifica la URL en el depurador de errores 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 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 la clase 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 mediante el cuadro de diálogo de contenido compartido o mediante tu propia interfaz personalizada.

El tamaño de los vídeos debe ser inferior a 12 MB.

Crea el contenido para compartir vídeos mediante el modelo ShareVideoContent. Puedes consultar la lista completa de atributos en la referencia de la clase 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 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 vídeos debe ser inferior a 12 MB.
  • Se pueden compartir a la vez un máximo de seis fotos y vídeos.

Crea tu contenido multimedia compartido mediante el modelo ShareMediaContent. Puedes consultar la lista completa de atributos en la referencia de la clase 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

Una vez que modeles el 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 la función de compartir en Android.


Con motivo de la publicación de la versión 4.28.0 del SDK de Facebook para Android, se ha retirado el botón “Me gusta” para este sistema operativo. Se seguirá ofreciendo compatibilidad con esta función 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 que la persona toque 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 añadir un botón “Me gusta”, incorpora 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”

Este botón llama 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);

Con motivo de la publicación de la versión 4.28.0 del SDK de Facebook, se ha retirado el botón “Enviar”. Se seguirá ofreciendo compatibilidad con esta función hasta el 5 de febrero de 2018.

Botón “Enviar”

El botón “Enviar” permite a las personas enviar fotos, vídeos y enlaces en privado a sus amigos y contactos mediante Facebook Messenger. Este botón llama a un cuadro de diálogo de mensajes. Para añadir el botón “Enviar”, incorpora el siguiente fragmento de código a tu vista:

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 la publicación. En función del SDK que uses, es posible que las personas deban 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 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 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 a la interfaz callbackManager del SDK en el método 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);
}

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 deban tocar el icono de la flecha hacia atrás para volver a tu 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 cuando se comparte contenido mediante la API.

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 a un enlace compartido.

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. En cualquier caso, la cita aparece en un campo distinto de los comentarios de los usuarios.

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

En versiones anteriores del SDK para Android, tu aplicación tenía que comprobar si había 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 la aplicación de Facebook nativa está instalada. De no ser así, el SDK desvía a las personas a su navegador predeterminado y abre el cuadro de diálogo para publicar en la sección 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 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 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 a tu aplicación o a su página de 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 acciones de Open Graph mediante el modelo ShareOpenGraphContent. Puedes consultar la lista completa de atributos en la referencia de la clase 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();