Compartir en iOS

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

Los usuarios también pueden compartir contenido en Facebook Messenger desde tu aplicación mediante la plataforma Messenger Expression o desde el cuadro de diálogo de mensajes "Compartir" en el SDK para iOS.

SDK de Messenger para iOSCuadro de diálogo de mensajes

Requisitos previos

Para poder agregar la función de compartir a tu aplicación, tendrás que:

  • Agregar el SDK de Facebook para iOS a tu entorno de desarrollo para celulares.
  • Agrega el identificador de la aplicación, el nombre para mostrar y un motivo legible por el que el archivo .plist de la aplicación puede acceder a las fotos.
  • Enlazar el elemento FBSDKShareKit.framework a tu proyecto

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.

Primeros pasos con el SDK para iOS

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 tiene una interfaz que puedes utilizar para representarlo y que se ajusta a <FBSDKSharingContent>. Una vez que modeles el contenido, agrega a tu aplicación una interfaz para compartir que se ajuste a <FBSDKSharing>; por ejemplo, FBSDKShareDialog.

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

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.

  • 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 desencadenar la función de compartir:

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

Nota: Cuando una aplicación comparte enlaces a las tiendas de iTunes o Google Play, no publicamos las imágenes ni las descripciones que se especifiquen con el contenido compartido. Por el contrario, publicamos información sobre la aplicación que extraemos directamente de la tienda de aplicaciones mediante WebCrawler. Es posible que esta información no incluya imágenes. Para obtener una vista previa del contenido compartido mediante enlace a iTunes o Google Play, especifica la URL en el depurador de contenido compartido.

Fotos

Los usuarios de tu aplicación pueden compartir fotos en Facebook mediante el cuadro de diálogo para compartir 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 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 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];
  ...
}

Videos

Los usuarios 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.
  • Es necesario tener instalado el cliente de Facebook para iOS (versión 26.0 o posterior).

Crea el contenido para compartir videos mediante el modelo FBSDKShareVideoContent. Puedes consultar la lista completa de atributos en la referencia de 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 video videoURL debe ser la URL de un activo. Puedes obtener una URL de activo de video, por ejemplo, de UIImagePickerController.

Contenido multimedia

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

  • Es necesario tener iOS 7.0 o una versión posterior.
  • Es necesario tener instalado el cliente Facebook para iOS (versión 52.0 o posterior).
  • El tamaño de cada foto y cada video debe ser inferior a 12 MB.
  • Las personas pueden compartir un video como máximo y hasta 29 o 30 fotos.

Crea tu contenido multimedia para compartir con el modelo FBSDKShareMediaContent. Puedes consultar la lista completa de atributos en la referencia de 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 para administrar tu contenido, puedes desencadenar los cuadros de diálogo de contenido compartido o de mensajes, o bien tu propia interfaz para compartir.

Botones

Facebook ofrece botones nativos para desencadenar la función de 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 tocar el botón "Me gusta". Para incluir un botón "Me gusta" a tu vista, agrégale el siguiente fragmento de código:

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 los usuarios compartir contenido en su biografía de Facebook, en la biografía de un amigo o en un grupo. El botón "Compartir" llama a un cuadro de diálogo de contenido compartido. Para incluir un botón "Compartir" a tu vista, agrégale el siguiente fragmento de código:

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

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:

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

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

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, como se indica 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 para compartir:

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 de Facebook nativa antes de abrir el cuadro de diálogo para compartir. 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.

Si está instalada la aplicación de Facebook nativa, el SDK (versiones 4.0-4.4) cambiará a la aplicación de Facebook nativa para iOS y, a continuación, le devolverá el control a tu aplicación una vez realizada una publicación. Si utilizas la versión 4.5 o una versión posterior del SDK, no se cambiará a los usuarios a la aplicación de Facebook para iOS nativa, sino que 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 de Messenger para iOS nativa y le devuelve el control a tu aplicación una vez realizada una 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 compartir actualizaciones de estado, fotos, videos y enlaces en Facebook, y permite especificar el público de la publicación y etiquetarla con un lugar. No es posible compartir historias de Open Graph mediante la hoja de acciones para compartir. El SDK de Facebook permite el uso de este controlador nativo: desde la versión 4.5, será lo que vean los usuarios 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 completar previamente el contenido que se va a compartir en el contexto de esta hoja. Por lo tanto, las aplicaciones no pueden completar previamente el campo "initialText" de la hoja con contenido que no haya escrito el usuario de la aplicación.

Esta API también utiliza el mismo bloque de estilos que otros componentes del SDK de Facebook. Para mostrar el cuadro de diálogo de contenido compartido de iOS nativo, 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 .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 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.

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. Sea cual fuere el caso, la cita aparece en un campo distinto de los comentarios del usuario.

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 de vuelta a tu aplicación desde publicaciones de Facebook realizadas desde esta.

Cuando los usuarios 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 la 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 de vuelta a tu aplicación o a su página en la App Store.

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

Crea el contenido para compartir acciones de Open Graph mediante el modelo FBSDKShareOpenGraphContent. Puedes consultar la lista completa de atributos en la referencia de 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 y pruebas de iOS

Si utilizas el simulador para probar las funciones para compartir en tu aplicación, aparecerán errores si intentas compartir videos, fotos o acciones de Open Graph. El motivo es que necesitas tener instalado Facebook para iOS, que es el que proporciona el cuadro de diálogo para compartir. Esta aplicación no es compatible con el simulador.

En el caso de los contenidos compartidos mediante enlaces, no es necesario tener instalado Facebook para iOS, por lo que es posible probarlos. Para probar otras situaciones, configura un dispositivo real de prueba que tenga instalado Facebook para iOS.