Compartir en Android

Después de que integras el inicio de sesión con Facebook, la opción para compartir en Facebook o Facebook Gaming, 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. Recomendamos a todos los desarrolladores de apps que usan el inicio de sesión con Facebook, la opción para compartir en Facebook o Facebook Gaming que comprendan cómo opera esta funcionalidad. 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.

En esta guía se detalla cómo permitir que los usuarios de tu app para Android compartan contenido en Facebook desde la app. Cuando alguien comparte contenido desde tu app, ese contenido aparece en su biografía. El contenido que los usuarios comparten en sus biografías también puede aparecer en el feed de sus amigos. Los usuarios también pueden compartir contenido desde tu app en Facebook Messenger.

Cuando implementas la opción de compartir, tu app no debe completar previamente el contenido que se va a compartir. El relleno previo de contenido no es coherente con las políticas para desarrolladores.

En las siguientes fotos de ejemplo se muestran el cuadro de diálogo de contenido compartido en tu app (a la izquierda) y la publicación resultante en la app de Facebook (a la derecha).

Primeros pasos con el uso compartido

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

Si deseas usar el SDK para compartir contenido de Facebook en el proyecto, puedes definirlo como dependencia en Maven.

  1. En el proyecto, abre tu_app | Gradle Scripts | build.gradle (Project) y agrega el siguiente repositorio a la sección buildscript { repositories {}}:

    mavenCentral() 
    
  2. En el proyecto, abre tu_app | Gradle Scripts | build.gradle (module: app) y agrega la siguiente instrucción de compilación a la sección dependencies{}:

    compile 'com.facebook.android:facebook-share:latest.release'
    
  3. Crea tu proyecto.

  4. Obtén el identificador de la app de Facebook correctamente configurado y vinculado a tu app para Android.

  5. Genera un hash de clave de desarrollo de Android y agrégalo a la página de Ejemplos de apps de tu configuración de desarrollador. Para obtener información, consulta Crear un hash de clave de desarrollo y Ejecutar aplicaciones de ejemplo.

  6. Agrega un ContentProvider al archivo AndroidManifest.xml y asigna {APP_ID} a tu identificador de la app:

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. Si tu app se orienta a Android 11 o a una versión posterior, agrega el siguiente bloque de consultas a tu archivo AndroidManifest.xml para que tu pueda visualizar la app de Facebook:

    <queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
  8. Agrega una Facebook Activity a tu proyecto e inclúyela en el archivo AndroidManifest.xml.

Modelar el 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 app.

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

A continuación, se proporciona un ejemplo de cómo puedes activar 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 en Google Play o la App Store, especifica la URL en el depurador de contenido compartido.

Si el contenido compartido de tu app tiene un enlace a alguna app 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 app de la tienda directamente (en caso de que no haya una imagen, el contenido compartido no incluirá una).

Fotos

Los usuarios de tu app pueden compartir fotos en Facebook mediante el cuadro de diálogo de contenido compartido. Para poder compartir, es necesario tener instalada la app 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

Los usuarios de tu app pueden compartir videos en Facebook mediante el cuadro de diálogo de contenido compartido.

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 app, mediante el cuadro de diálogo de contenido compartido. Ten en cuenta lo siguiente:

  • Es necesario tener instalada la app de Facebook nativa para Android (versión 71 o posterior).
  • 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.

Botones

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


Botón “Compartir”

El botón "Compartir" llama a un cuadro de diálogo de contenido compartido. Para incluir el 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);

Cuadro de diálogo de contenido compartido

El cuadro de diálogo de contenido compartido cambia a la app de Facebook nativa para Android y le devuelve el control a tu app 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 app. Si no está instalada la app 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 en un enlace de tu actividad, crea una instancia de 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 al 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 usas actividades o fragmentos de AndroidX, no es necesario que anules onActivityResult.

Cuadro de diálogo de mensajes

El cuadro de diálogo de mensajes cambia a la app de Messenger nativa para Android y le devuelve el control a tu app 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 app.

MessageDialog.show(activityOrFragment, content);

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 enlaces.

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 para el uso compartido

En versiones anteriores del SDK de Facebook para Android, tu app tenía que comprobar si estaba instalada una app 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 app, 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 app 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.

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