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.

Introducción al 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 continuación, figura un ejemplo de cómo puedes activar el contenido compartido:

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 50 MB.
  • Los usuarios que comparten contenido deben tener el cliente 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
{
  FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
  if (@available(iOS 11, *)) {
    video.videoAsset = [info objectForKey:UIImagePickerControllerPHAsset];
  } else {
    video.videoURL = [info objectForKey:UIImagePickerControllerReferenceURL];
  }
  FBSDKShareVideoContent *content = [[FBSDKShareVideoContent alloc] init];
  content.video = video;
  ...
}

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.
  • Los usuarios que comparten contenido deben tener el cliente de Facebook para iOS instalado (versión 52.0 o posterior).
  • El tamaño de las fotos debe ser inferior a 12 MB y el de los vídeos inferior a 50 MB.
  • Los usuarios pueden compartir un vídeo como máximo y un total de 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 crees un modelo y gestiones el contenido, puedes activar los cuadros de diálogo de contenido compartido o de mensajes.

Botones

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


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 este botón esté oculto. Para comprobar si es posible mostrar el botón "Enviar" en el dispositivo actual, utiliza la propiedad FBSDKSendButton del valor isHidden.

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 Messenger 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, los iPad no admiten el cuadro de diálogo de mensajes.

Integración con iOS

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 crear enlaces a contenido concreto dentro de ella.

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.