Compartir en iOS

En esta guía se detalla cómo activar la función para compartir contenido en Facebook desde tu aplicación para iOS. Si alguien comparte contenido desde tu aplicación, este aparecerá en su biografía y en la sección de noticias de sus amigos.

Las personas también pueden compartir contenido en Facebook Messenger desde tu aplicación mediante Expresión de Messenger (la plataforma para stickers de terceros en Messenger) o desde el cuadro de diálogo de mensajes para compartir del SDK para iOS.

SDK de Messenger para iOSCuadro de diálogo de mensajes

Requisitos previos

Para poder añadir la acción de compartir a tu aplicación, tendrás que:

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.

Primeros pasos con el SDK para iOS

Modelar contenido

La versión 4.0 y posteriores de los SDK de Facebook incluyen nuevos modelos para compartir contenido. Cada tipo de contenido tiene una interfaz que puedes utilizar para representarlo y que se ajusta a <FBSDKSharingContent>. Una vez que modeles el contenido, añade una interfaz para compartir a tu aplicación que se ajuste al protocolo <FBSDKSharing>, como la clase FBSDKShareDialog.

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 FBSDKShareLinkContent. Puedes consultar la lista completa de atributos en la referencia de la clase FBSDKShareLinkContent.

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

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

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

Nota: Si tu aplicación comparte enlaces en iTunes Store o Google Play, no publicaremos las imágenes ni las descripciones que especifiques en el contenido compartido. En su lugar, publicaremos información sobre la aplicación que extraemos directamente de la tienda de aplicaciones correspondiente mediante Webcrawler. Es posible que esta información no incluya imágenes. Para obtener una vista previa del enlace compartido en iTunes Store o Google Play, especifica la URL en el depurador de errores de contenido compartido.

Fotos

Las personas que usan tu aplicación pueden compartir fotos en Facebook con 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 descargada la aplicación nativa de Facebook para iOS (versión 7.0 o posterior).

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

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  UIImage *image = info[UIImagePickerControllerOriginalImage];

  FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
  photo.image = image;
  photo.userGenerated = YES;
  FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
  content.photos = @[photo];
  ...
}

Vídeos

Las personas que usan tu aplicación pueden compartir vídeos en Facebook con 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.
  • Es necesario tener instalada la aplicación nativa de Facebook para iOS (versión 26.0 o posterior).

Crea el contenido para compartir vídeos mediante el modelo FBSDKShareVideoContent. Puedes consultar la lista completa de atributos en la referencia de la clase FBSDKShareVideoContent.

- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  NSURL *videoURL = [info objectForKey:UIImagePickerControllerReferenceURL];

  FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
  video.videoURL = videoURL;
  FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
  content.video = video;
  ...
}

La URL del vídeo (videoURL) debe ser una URL de activo. Puedes obtener una URL de activo de vídeo, por ejemplo, mediante la clase UIImagePickerController.

Elementos multimedia

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

  • Es necesario tener la versión 7.0 o posterior de iOS.
  • Es necesario tener instalada la aplicación nativa de Facebook para iOS (versión 52.0 o posterior).
  • El tamaño de las fotos y los vídeos debe ser inferior a 12 MB.
  • Se puede compartir un máximo de un vídeo y 29 fotos, o 30 fotos.

Crea tu contenido multimedia compartido mediante el modelo FBSDKShareMediaContent. Puedes consultar la lista completa de atributos en la referencia de la clase FBSDKShareMediaContent.

FBSDKSharePhoto *photo = [FBSDKSharePhoto photoWith...
FBSDKShareVideo *video = [FBSDKShareVideo videoWith...
FBSDKShareMediaContent *content = [FBSDKShareMediaContent new];
content.media = @[photo, video];
}

Métodos para compartir

Una vez que modeles el contenido, puedes activar los cuadros de diálogo de contenido compartido o de mensajes, o bien tu propia interfaz para compartir.

Botones

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


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”. Para añadir este botón, incorpora el siguiente fragmento de código a tu vista:

FBSDKLikeControl *button = [[FBSDKLikeControl alloc] init];
button.objectID = @"https://www.facebook.com/FacebookDevelopers";
[self.view addSubview:button];

Botón “Compartir”

El botón "Compartir" permite a las personas compartir contenido en su biografía de Facebook, en la biografía de un amigo o en un grupo. Este botón llama a un cuadro de diálogo de contenido compartido. Para añadir el botón "Compartir", incorpora el siguiente fragmento de código a tu vista:

FBSDKShareButton *button = [[FBSDKShareButton alloc] init];
button.shareContent = content;  
[self.view addSubview:button];

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:

FBSDKSendButton *button = [[FBSDKSendButton alloc] init];
button.shareContent = content; 
[self.view addSubview:button];

Si no está instalada la aplicación Messenger, el botón "Enviar" no se mostrará. Asegúrate de que el diseño de tu aplicación sea adecuado cuando esté oculto. Para comprobar si es posible mostrar el botón "Enviar" en el dispositivo actual, utiliza el valor isHidden de la clase FBSDKSendButton:

if (button.isHidden) {
  NSLog(@"Is hidden");
} else {
  [self.view addSubview:button];
}

Cuadro de diálogo de contenido compartido

Para compartir mediante las funciones integradas en Facebook, debes definir el contenido en la sección Modelar contenido anterior y, a continuación, llamar al cuadro de diálogo de contenido compartido. Por ejemplo, para compartir un enlace mediante el cuadro de diálogo de contenido compartido:

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"http://developers.facebook.com"];
[FBSDKShareDialog showFromViewController:self
                              withContent:content
                                 delegate:nil];

En versiones anteriores del SDK para iOS, tu aplicación tenía que comprobar si había instalada una aplicación nativa de Facebook 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.

El SDK (versiones de 4.0 a 4.4) cambiará a la aplicación nativa de Facebook para iOS (si está instalada) y, una vez realizada la publicación, le devolverá el control a tu aplicación. En cambio, si utilizas la versión 4.5 o posterior del SDK, las personas verán la hoja de acciones para compartir de iOS, a menos que lo que se comparta sea una historia de Open Graph.

Cuadro de diálogo de mensajes

El cuadro de diálogo de mensajes cambia a la aplicación nativa de Facebook para iOS y le devuelve el control a tu aplicación una vez realizada la publicación.

[FBSDKMessageDialog showWithContent:content delegate:nil];

Nota: En estos momentos, iPad no admite el cuadro de diálogo de mensajes.

Integración con iOS

A partir de la versión 6, iOS incluye una hoja nativa de acciones para compartir que permite publicar actualizaciones de estado, fotos, vídeos y enlaces en Facebook, especificar el público de la publicación e incluir una etiqueta de lugar. No se pueden compartir historias de Open Graph con la hoja de acciones para compartir. El SDK de Facebook admite el uso de este controlador nativo y, desde la versión 4.5, será lo que vean las personas en la mayoría de los casos cuando llames al cuadro de diálogo de contenido compartido de Facebook.

El uso de esta hoja de acciones para compartir de iOS está sujeto a la Política de la plataforma de Facebook, incluida la sección 2.3, que establece que las aplicaciones no pueden rellenar previamente el contexto de la hoja. Por lo tanto, las aplicaciones no pueden rellenar previamente el campo "initialText" de la hoja con contenido que no haya escrito el usuario de la aplicación.

Esta API utiliza el mismo bloque de estilos que otros componentes del SDK de Facebook. Para mostrar el cuadro de diálogo de contenido compartido para iOS, utiliza:

// Example content. Replace with content from your app.
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = self;
dialog.content = content;
dialog.mode = FBSDKShareDialogModeShareSheet;
[dialog show];

Ten en cuenta que se necesita el parámetro .fromViewController para que aparezca la hoja de acciones para compartir.

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.

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:@"https://developers.facebook.com"];
content.hashtag = [FBSDKHashtag hashtagWithString:@"#MadeWithHackbook"];

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.

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [@"https://developers.facebook.com/products/sharing"];
content.quote = @"Learn quick and simple ways for people to share content from your app or website to Facebook.";

Temas avanzados

App Links te permite enlazar a tu aplicación desde publicaciones de Facebook que se han realizado en ella.

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 una llamada a la API Graph para publicar un enlace en Facebook:

[FBSDKShareAPI shareWithContent:content delegate:nil];

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 historias compartidas enlazan a tu aplicación o a la página correspondiente de App Store.

Para obtener más información sobre cómo añadir historias personalizadas a tu aplicación, consulta Historias de Open Graph en iOS.

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

NSDictionary *properties = @{
  @"og:type": @"fitness.course",
  @"og:title": @"Sample Course",
  @"og:description": @"This is a sample course.",
  @"fitness:duration:value": @100,
  @"fitness:duration:units": @"s",
  @"fitness:distance:value": @12,
  @"fitness:distance:units": @"km",
  @"fitness:speed:value": @5,
  @"fitness:speed:units": @"m/s",
};
FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:properties];
FBSDKShareOpenGraphAction *action = [[FBSDKShareOpenGraphAction alloc] init];
action.actionType = @"fitness.runs";
[action setObject:object forKey:@"fitness:course"];
FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
content.action = action;
content.previewPropertyName = @"fitness:course";

Simulador de iOS y pruebas

Si utilizas el simulador para probar la acción de compartir en tu aplicación con vídeos, fotos o acciones de Open Graph, aparecerán errores. Esto ocurre porque necesitas tener instalado Facebook para iOS, que es lo que proporciona el cuadro de diálogo de contenido compartido; sin embargo, esta aplicación no es compatible con el simulador.

Sí podrás probar los enlaces compartidos, ya que no es necesario tener instalado Facebook para iOS. Para probar otras situaciones relacionadas con la acción de compartir, configura un dispositivo de prueba real que tenga instalado Facebook para iOS.