Fundamentos del marco social

Aprenda cómo aprovechar el poder del Marco Social con esta publicación, tomada del Capítulo 11 del libro Mobiletuts + Decodificando el iOS 6 SDK!


La introducción del marco de Twitter en iOS 5 fue el primer paso hacia la integración de iOS con las redes sociales populares. En iOS 6, Apple introdujo el marco social. El marco social no solo reemplaza efectivamente al marco de Twitter, sino que también extiende su funcionalidad al agregar soporte tanto para Facebook como para Sina Weibo..

A pesar de que el marco de Twitter ha quedado obsoleto a partir de iOS 6, afortunadamente es una tarea trivial migrar el código existente del marco de Twitter al marco social. Las API del marco social no hacen mención de redes sociales específicas. El componente de red se ha abstraído, lo que hace que agregar soporte para nuevas redes sociales en el futuro sea una tarea indolora. Conclusión: la buena noticia para los desarrolladores es que ponerse en marcha con el marco social es fácil, especialmente si ya está familiarizado con el marco de Twitter..

En este capítulo, le daré una descripción general del marco social y lo que ofrece y le mostraré cuáles son sus opciones cuando desee agregar un componente social a sus aplicaciones. Si bien este capítulo solo cubrirá los aspectos básicos del marco social, el próximo capítulo tratará sobre una integración más completa de su aplicación con el marco social. Como un bono adicional, también discutiré la clase UIActivityViewController. Esta es otra adición a UIKit que hace que compartir contenido sea muy fácil.!


Panorama teórico

Antes de iOS 6, compartir contenido no era tan fácil. Si alguna vez has integrado Facebook con una aplicación de iOS, es casi seguro que te has encontrado con varios obstáculos en el camino. En iOS 6, sin embargo, se han realizado una serie de mejoras significativas. A partir de iOS 6, la integración con las redes sociales ahora está integrada en el sistema operativo, lo que hace que compartir redes sociales sea mucho más fácil para los desarrolladores de SDK..

Al momento de escribir este artículo, el marco social admite la integración con Facebook, Sina Weibo y Twitter. El soporte para Twitter es la razón obvia para la desaprobación del marco de Twitter. Sina Weibo podría ser el extraño pato en la fila para algunos de ustedes. Sina Weibo es una plataforma de microblogging muy popular en China, una de las naciones más pobladas del mundo, por lo que no es extraño ver su integración en iOS.

Compartir contenido

Con lo anterior en mente, ¿qué opciones tiene cuando una de sus aplicaciones necesita integrarse con Facebook, Twitter o Sina Weibo? El marco social ofrece dos opciones, utilizando (1) el SLComposeViewController clase o (2) la SLRequest clase. Si ha trabajado con el marco de Twitter en iOS 5, esos nombres de clase seguramente sonarán una campana.

En este capítulo, me acercaré a la SLComposeViewController clase. Es una solución elegante y fácil de usar que permite a los usuarios compartir contenido con Twitter, Facebook y Sina Weibo. Echemos un vistazo a este recién llegado.

SLComposeViewController

La forma más fácil de compartir contenido con una de las redes sociales admitidas es haciendo uso del SLComposeViewController clase. Su prefijo, SL, indica que forma parte del marco social. los SLComposeViewController clase es el equivalente de la TWTweetComposeViewController Clase del marco de Twitter. La diferencia más importante es que SLComposeViewController No está vinculado a ninguna red social en particular.

Creando una instancia de SLComposeViewController es tan fácil como llamar composeViewControllerForServiceType: en la clase y pasando el tipo de servicio, es decir, la red social que está apuntando. Al momento de escribir este artículo, hay tres opciones., SLServiceTypeTwitter, SLServiceTypeFacebook, y SLServiceTypeSinaWeibo.

Puedes configurar el SLComposeViewController Instalar configurando el texto inicial o agregando una imagen o enlace. Configurando el SLComposeViewController La instancia es un paso opcional, ya que el usuario podrá modificar el contenido del mensaje antes de enviarlo al servicio de destino..

Antes de presentar el controlador de vista de composición al usuario, es una buena práctica establecer su controlador de finalización (SLComposeViewControllerCompletionHandler). Este último es un bloque que se ejecuta cuando la solicitud al servicio finaliza, con éxito o sin éxito. El bloque toma un parámetro, el resultado de la solicitud. Esto puede ser útil si desea informar al usuario si la solicitud fue exitosa o no.

Presentando el SLComposeViewController Al usuario se hace enviándole un mensaje de presentViewController: animado: al igual que lo hace con cualquier otro controlador de vista (modal). Como mencioné anteriormente, el usuario todavía puede editar el mensaje, etiquetar geográficamente el mensaje o agregar una imagen o enlace. Las opciones así como la interfaz de usuario del SLComposeViewController La instancia depende del servicio que se está apuntando. Si el usuario envía un mensaje a Facebook, por ejemplo, la vista modal de la SLComposeViewController La instancia está adornada con el esquema de color purpurino familiar..

los SLComposeViewController La clase tiene otro método de clase que vale la pena mencionar., isAvailableForServiceType:. El TWTweetComposeViewController tiene un nombre de método de clase similar, canSendTweet. Este método permite que su aplicación le pregunte al sistema operativo si el servicio que desea orientar está disponible. Al igual que con composeViewControllerForServiceType, el método de clase aceptará un tipo de servicio que indica qué servicio está siendo dirigido. Aunque isAvailableForServiceType: devuelve un o NO, el sistema operativo realiza una serie de comprobaciones para usted entre bambalinas. Verificará si se puede acceder a la red social y, lo que es más importante, verificará si el usuario ha instalado una cuenta válida para el servicio de destino. Echemos un vistazo más de cerca a las cuentas de usuario y cómo son administradas por el sistema operativo.

Cuentas de redes sociales

El marco social adopta un concepto conocido como inicio de sesión único (SSO), y es importante comprender las implicaciones de esta decisión de diseño. En pocas palabras, ya no es necesario que cada aplicación de terceros se autentique con el servicio de destino, el sistema operativo ahora se encarga de esto y expone varios puntos finales a los desarrolladores a través del marco social. Como habrá adivinado, esto significa que es necesaria una ubicación central para almacenar las cuentas del usuario. Esa ubicación central es, por supuesto, la aplicación de configuración de iOS, y permitir a los usuarios administrar los detalles de sus redes sociales desde la configuración hace que compartir contenido desde las aplicaciones sea mucho más eficiente..

Si bien la aplicación de configuración de iOS 6 solo brinda la opción de administrar una cuenta de Facebook, los usuarios pueden controlar varias cuentas de Twitter. Al almacenar las cuentas del usuario en una ubicación central, los desarrolladores de aplicaciones de terceros ya no necesitan administrar estos datos confidenciales por sí mismos.


Figura 1
Figura 2

UIActivityViewController

UIActivityViewController es una maravillosa adición a UIKit. Hace que compartir contenido sea muy fácil. Como el nombre de la clase lo indica., UIActivityViewController es una subclase de UIViewController. UIActivityViewController hace que compartir contenido sea trivial al darle al usuario una variedad de opciones para elegir. El usuario puede compartir contenido por correo electrónico, Twitter o simplemente pegar una URL en el portapapeles. Hay bastantes opciones para elegir, y los puntos finales no están restringidos a las tres redes sociales soportadas por el marco social. Como el UIActivityViewController su nombre lo indica, la clase es parte de UIKit, no del marco social. En otras palabras, no es necesario vincular su proyecto con el marco social si solo desea utilizar el UIActivityViewController clase.

Aunque UIActivityViewController no es parte del marco social, elegí incluirlo en este capítulo, ya que comparte algo de terreno con el marco social. De hecho, en unos instantes notará que UIActivityViewController comparte bastante funcionalidad con SLComposeViewController. Para comprender mejor UIActivityViewController , Podrías compararlo con una oficina de correos. Una oficina de correos tomará su mensaje y se asegurará de que se envíe a la dirección (el servicio o punto final) especificada por usted.

Algunos de ustedes pueden notar que tiene cierta semejanza con la conocida biblioteca de código abierto ShareKit. UIActivityViewController es mucho más potente, porque se integra perfectamente con el sistema operativo y sus servicios. Sin embargo, al igual que con ShareKit, los desarrolladores pueden agregar puntos finales personalizados a la matriz de puntos finales que UIActivityViewController Se integra y muestra al usuario..

Utilizando UIActivityViewController es tan sencillo como usar SLComposeViewController. El inicializador designado de UIActivityViewController toma dos parámetros, (1) elementos de actividad y (2) actividades de aplicación. Ambos argumentos deben ser instancias de NSArray. El primer parámetro es una matriz de objetos de datos que desea compartir. La matriz puede incluir uno o más fragmentos de texto o solo una imagen. El tipo de contenido que puede compartir no solo depende de qué tipo de datos puede proporcionar su aplicación, sino también qué tipo de datos acepta el punto final. los UIActivityViewController la clase se asegurará de que los objetos de datos se procesen correctamente según el servicio o el punto final que el usuario elija.

El segundo parámetro, actividades de aplicación, es una serie de servicios o puntos finales que UIActivityViewController Se presentará al usuario. Los servicios incluyen correo electrónico, Twitter, Facebook, imprimir o copiar algo en el portapapeles. Como mencioné anteriormente, los desarrolladores también tienen la opción de agregar servicios. Si las actividades de la aplicación se establecen en cero, el sistema operativo utilizará el conjunto predeterminado de actividades de la aplicación..

Después de presentar el UIActivityViewController instancia para el usuario, UIActivityViewController Se encargará del resto. Por ejemplo, si ha agregado Twitter como una actividad de aplicación., UIActivityViewController primero verificará si Twitter está disponible y si el usuario ha instalado una cuenta de Twitter en su dispositivo antes de presentarlo como una opción para el usuario final. UIActivityViewController le ahorra muchos dolores de cabeza, y solo requiere de unas pocas líneas de código para integrarse con una aplicación.


Proyecto Tutorial

Configuración del proyecto

Para ilustrar lo fácil que es usarlo. UIActivityViewController y SLComposeViewController, Vamos a construir una aplicación shoebox simple para compartir fotos. La aplicación permite a los usuarios tomar una imagen, agregar un título y compartirla con amigos y familiares. La aplicación de muestra le mostrará lo fácil que es compartir contenido de forma dinámica en iOS 6.

Comience creando un nuevo proyecto en Xcode. Selecciona el Solicitud de vista única plantilla de la lista de plantillas (figura 3). Asigne un nombre a su aplicación Sharetastic, ingrese el nombre y el identificador de la empresa, configure el iPhone para la familia de dispositivos y verifique Utilice el conteo automático de referencias. Desmarque las casillas de verificación restantes para este proyecto (Figura 4). Especifique dónde desea guardar el proyecto y haga clic en el Crear botón.


figura 3
Figura 4

Añadiendo el marco social

Como nuestra aplicación aprovechará el marco social, debemos agregarlo a nuestro proyecto. Seleccione el proyecto en el Navegador de proyectos y selecciona el objetivo a la derecha (Figura 5). Selecciona el Construir fases pestaña en la parte superior, abre la Enlace Binario Con Bibliotecas cajón, haga clic en el botón más, y elija Social.framework de la lista (Figura 5). Nuestro proyecto ahora está vinculado exitosamente en el marco social..


Figura 5

No olvide agregar una declaración de importación en la parte superior de nuestro archivo de encabezado del controlador de vista para importar los encabezados del marco social en su proyecto.

 #importar  #importar 

Outlets y Acciones

Antes de crear la interfaz de usuario de nuestra aplicación, debemos agregar las salidas y acciones necesarias al archivo de encabezado de nuestro controlador de vista. Un total de cuatro puntos de venta deben agregarse, un UITextField Para ingresar el título de la imagen, un UIImageView mostrando la imagen tomada, y dos UIButton instancias. Al tocar el primer botón se enviarán la imagen y el título a la cuenta de Facebook del usuario. Al tocar el segundo botón aparece una instancia de UIActivityViewController, presentando al usuario una serie de opciones para compartir la imagen y el título. Como habrás adivinado, cada botón está atado a un IBAcción. El fragmento de código a continuación muestra cómo debe verse el archivo de encabezado de nuestro controlador de vista:

 #importar  #importar  @interface RPViewController: UIViewController @property (débil, no atómico) IBOutlet UITextField * captionTextField; @ propiedad (débil, no atómica) IBOutlet UIImageView * imageView; @ propiedad (débil, no atómica) IBOutlet UIButton * facebookButton; @ propiedad (débil, no atómica) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) remitente; - (IBAction) compartir: (id) remitente; @fin

Interfaz de usuario

Es hora de dirigirse a nuestro archivo XIB del controlador de vista. Para simplificar las cosas, no usaremos las nuevas funciones de Autolayout de iOS 6 en este capítulo. Con el archivo XIB del controlador de vista seleccionado, abra el Inspector de archivos a la derecha y desmarque la Usar Autolayout caja.

Con el archivo XIB del controlador de vista seleccionado, comience arrastrando un campo de texto en la vista del controlador de vista y colóquelo en la parte superior de la vista (figura 6). Configure el campo de texto abriendo el Inspector de atributos y cambiar su texto de marcador de posición a Introducir subtítulo. Con el campo de texto aún seleccionado, abra el Inspector de conexiones y conectar el campo de texto delegar salida a la Propietario del archivo Objeto a la izquierda. Esto significa que el controlador de vista actuará como delegado del campo de texto. La razón para hacerlo se aclarará en pocos minutos. Asegúrese de que también ha conectado el captionTextField Salida al objeto de campo de texto en pantalla..


Figura 6

Arrastra una instancia de UIImageView de la biblioteca a la vista del controlador de vista y colóquela debajo del campo de texto (figura 6). Modifica sus dimensiones a 280 puntos por 280 puntos. Abre el Inspector de atributos Una vez más y cambiar el modo de visualización de la imagen (modo de contenido) propiedad a Ajuste de aspecto y asegúrese de comprobar Interacción del usuario habilitada. Esto último es importante ya que agregaremos un reconocedor de gestos de toque a la vista de imagen en breve. Si no habilitamos la interacción del usuario para la vista de imagen, el reconocedor de gestos de toque no funcionará. No olvide conectar la salida del controlador de vista con nuestra vista de imagen. La forma más fácil de hacerlo es presionando la tecla Ctrl clave, arrastrando desde la vista de imagen al objeto Propietario del archivo y seleccionando la salida apropiada.

Para finalizar la interfaz de usuario de nuestra aplicación, agregue dos UIButton instale en la vista del controlador de nuestra vista y colóquelas debajo de la vista de la imagen (figura 6). Dale al botón superior un título de Facebook y el botón de abajo un título de Compartir. Conecte los tomacorrientes restantes como se describió anteriormente. Además, conecte las dos acciones de nuestro controlador de vista presionando la tecla Ctrl, arrastrando desde el objeto Propietario del archivo a cada botón, y luego seleccionando la acción correspondiente. La interfaz de usuario está lista. Ahora es el momento de comenzar a escribir un código para que todo funcione!

Delegación

Hay una cosa más que debemos agregar a nuestro archivo de encabezado del controlador de vista. Como vamos a hacer uso de UIImagePickerController Para capturar imágenes, nuestro controlador de vista debe ajustarse tanto a la UINavigationControllerDelegate y UIImagePickerControllerDelegate protocolos Además, como mencioné hace unos momentos, nuestro controlador de vista también actuará como delegado del campo de texto del título. Esto significa que el controlador de vista debe cumplir con el UITextFieldDelegate protocolo también. Eche un vistazo al archivo de encabezado actualizado de nuestro controlador de vista para obtener una aclaración.

 #importar  #importar  @interface RPViewController: UIViewController  @ propiedad (débil, no atómica) IBOutlet UITextField * captionTextField; @ propiedad (débil, no atómica) IBOutlet UIImageView * imageView; @ propiedad (débil, no atómica) IBOutlet UIButton * facebookButton; @ propiedad (débil, no atómica) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) remitente; - (IBAction) compartir: (id) remitente; @fin

Lo primero es lo primero

En nuestro archivo de implementación del controlador de vista, comenzamos extendiendo la definición de clase y agregando una propiedad privada. Es una buena práctica no exponer todas las propiedades de una clase declarándolas en el archivo de encabezado, y una forma de hacerlo es extendiendo la definición de clase en el archivo de implementación. Después de la primera declaración de importación y antes de la @implementación directiva, agregue el siguiente fragmento de código para declarar una propiedad privada nueva. La propiedad mantendrá una referencia a la imagen que el usuario toma con la cámara del dispositivo..

 @interface RPViewController () @property (strong, nonatomic) UIImage * image; @fin

Una buena característica de Xcode 4.4+ es que ya no necesita sintetizar los accesores de propiedades. Esto se hace para usted entre bastidores y sigue las convenciones de nomenclatura de Apple. En nuestro ejemplo, una variable de instancia se creará con un nombre de _imagen y los accesores para nuestra propiedad de imagen se sintetizan automáticamente para nosotros.

Ver ciclo de vida

Siempre me gusta comenzar implementando el ciclo de vida de la vista de un controlador de vista. Además, también prefiero mantener el viewDidLoad Método corto añadiendo algunos métodos de ayuda. Un método que casi siempre creo es setupView, que se encarga de configurar y configurar la vista del controlador de vista. Echemos un vistazo a la viewDidLoad y setupView Métodos para tener una idea de lo que quiero decir..

 - (void) viewDidLoad [super viewDidLoad]; // Vista de configuración [auto configuraciónView];  - (void) setupView // Agregar Gesture Recognizer UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Vista de actualización [self updateView]; 

Como puedes ver, la setupView El método no es complejo. Agregamos un reconocedor de gestos de toque a la vista de imagen para que el usuario pueda tomar una imagen al tocar la vista de imagen en nuestra interfaz de usuario. Primero iniciamos un reconocedor de gestos de toque y luego lo agregamos a nuestra vista de imagen. El reconocedor de gestos de toque envía el mensaje. snapImage: a nuestro controlador de vista cuando el usuario toca la vista de imagen. Vamos a echar un vistazo a la snapImage: Método en solo un segundo.

Al final de setupView Método, invocamos el método updateView. Nuevamente, este es un método auxiliar que utilizo muy a menudo, ya que me permite agrupar la lógica asociada con la actualización de la vista. Echemos un vistazo rápido a la updateView método.

 - (void) updateView BOOL sharingEnabled = self.image? SI NO; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha; 

Como lo indica el nombre del método, el método simplemente actualiza la vista y sus subvistas. Comenzamos por verificar si una imagen está disponible al verificar si nuestra propiedad de imagen está configurada. Si tenemos una imagen con la que trabajar, habilitamos los botones de Facebook y compartir, y establecemos sus valores alfa en 1.0. Si una imagen no está disponible, es decir, el usuario aún no ha tomado una, deshabilitamos ambos botones y los hacemos ligeramente transparentes para indicar al usuario que los botones están deshabilitados..

Tomando una imagen

Aprovechando UIImagePickerController , La captura de imágenes es un proceso simple y directo. Empecemos examinando la snapImage: método invocado por el reconocedor de gestos de toque cuando el usuario toca la vista de imagen. Primero, una instancia de UIImagePickerController se inicializa y su delegado se establece en self, es decir, nuestro controlador de vista. A continuación, le preguntamos al sistema operativo si una cámara está disponible llamando isSourceTypeAvailable sobre el UIImagePickerController clase y pasandolo UIImagePickerControllerSourceTypeCamera como el argumento. Con base en el valor de retorno, establecemos el tipo de fuente de nuestro UIImagePickerController ejemplo. Como un seguro a prueba de fallos, el tipo de fuente se establece en UIImagePickerControllerSourceTypePhotoLibrary Si no hay cámara disponible por cualquier motivo. Esto significa que el usuario puede seleccionar una imagen de la biblioteca de fotos del dispositivo. Finalmente, el controlador de selección de imágenes se presenta al usuario..

 - (void) takeImage: (UITapGestureRecognizer *) tgr // Initialize Image Picker Controller UIImagePickerController * ip = [[UIImagePickerController alloc] init]; // Establecer delegado [ip setDelegate: self]; if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Establezca Source Type en Camera [ip setSourceType: UIImagePickerControllerSourceTypeCamera];  else // Establecer el tipo de origen en la biblioteca de fotos [ip ​​setSourceType: UIImagePickerControllerSourceTypePhotoLibrary];  // Controlador de vista actual [self presentViewController: ip animated: YES completed: nil]; 

¿Puedes adivinar cuál es el siguiente paso? Necesitamos implementar los métodos de la UIImagePickerControllerDelegate protocolo. El protocolo tiene dos métodos., imagePickerController: didFinishPickingMediaWithInfo: y imagePickerControllerDidCancel:. Déjame guiarte a través de cada método.

En imagePickerController: didFinishPickingMediaWithInfo:, Comenzamos almacenando una referencia a la imagen original, sin editar. En las siguientes líneas de código, asignamos la imagen original a nuestra propiedad de imagen y actualizamos la vista. Recuerda que esto habilitará los botones de Facebook y compartir. Finalmente, descartamos el controlador del selector de imagen..

 - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info UIImage * originalImage = [info objectForKey: UIImagePickerControllerOriginalImage]; if (originalImage) self.image = originalImage; // Vista de actualización [self updateView];  // Descartar el controlador del selector de imagen [self dismissViewControllerAnimated: YES completed: nil]; 

El segundo método de delegado contiene solo una línea de código. Si el usuario pulsa el botón Cancelar, el controlador del selector de imagen se cierra sin más demoras..

 - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Descartar controlador de selector de imagen [self dismissViewControllerAnimated: YES completed: nil]; 

Los detalles importan

Antes de implementar el Facebook: y compartir: Acciones, quiero tomar un ligero desvío. ¿Por qué no hemos asignado la imagen recién tomada a la propiedad de imagen de la vista de imagen? Asignar la imagen recién ajustada a la propiedad de imagen de nuestra vista de imagen es, de hecho, una opción perfectamente viable, pero he adoptado un enfoque diferente. Desde la introducción de la @sintetizar Directivas, las personas a menudo olvidan lo útiles que pueden ser los setters y getters. Déjame explicarte lo que quiero decir con un ejemplo.

En nuestra aplicación de muestra, he anulado el configurador de la propiedad de imagen de nuestro controlador de vista. Esto me permite (1) agrupar código relacionado en una ubicación y (2) solo actualizar la vista de imagen cuando la imagen cambia. Esto puede parecer un detalle con muy poco uso en este punto, pero le muestra cómo ya podemos comenzar a optimizar nuestro código de manera sutil, lo que afectará la legibilidad del código e incluso el rendimiento. En este ejemplo en particular, no afectará el rendimiento de nuestra aplicación, pero es bueno usar las mejores prácticas siempre que lo considere oportuno..

Agregue lo siguiente al archivo de implementación ahora:

 - (void) setImage: (UIImage *) image if (_image! = image) _image = image; // Actualizar vista de imagen self.imageView.image = _image; 

UITextFieldDelegate

Antes de que podamos comenzar a compartir imágenes, necesitamos implementar un método de delegado de UITextFieldDelegate protocolo, eso es, textFieldShouldReturn:. En este método de delegado, renunciamos al campo de texto como el primer respondedor si el usuario pulsa el botón de retorno del teclado. Esto descartará el teclado y revelará los botones de compartir debajo de él..

 - (BOOL) textFieldShouldReturn: (UITextField *) textField // Resign First Responder [textField resignFirstResponder]; devuelve SÍ; 

Compartamos

Es hora de ensuciarnos las manos con el marco social y UIActivityViewController. Empecemos por implementar el Facebook: método. Se ilustrará cómo usar SLComposeViewController. Eche un vistazo a su implementación a continuación y vamos a desglosarla paso a paso..

 - (IBAction) facebook: (id) sender if ([SLComposeViewController isAvailableForServiceType: SLServiceTypeFacebook]) // Initialize Compose View Controller SLComposeViewController * vc = [SLComposeViewController composeViewControllerForServiceType: // Configurar Compose View Controller [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Presentar Compose View Controller [self presentViewController: vc animated: YES completed: nil];  else NSString * message = @ "Parece que no podemos hablar con Facebook en este momento o aún no ha agregado su cuenta de Facebook a este dispositivo. Vaya a la aplicación Configuración para agregar su cuenta de Facebook a este dispositivo."; UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ Mensaje "Oops": delegado del mensaje: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; 

Como mencioné anteriormente, es necesario comenzar preguntando al sistema operativo si el servicio al que nos dirigimos está disponible. Si isAvailableForServiceType: devoluciones NO, mostramos una vista de alerta que indica al usuario cuál podría ser el problema. Si el servicio está disponible, sin embargo, inicializamos una instancia de SLComposeViewController invocando el método de clase composeViewControllerForServiceType:. El argumento que pasamos al método de clase es SLServiceTypeFacebook, Lo que indica que estamos apuntando a la plataforma de Facebook..

Aunque nuestro usuario puede modificar el mensaje antes de enviarlo a Facebook, rellenamos el mensaje con el contenido del campo de texto del título y adjuntamos la imagen ajustada al mensaje. Finalmente, presentamos el controlador de vista de composición al usuario. Luego, el usuario puede editar, cancelar o publicar el mensaje. El usuario tiene el control. Es importante recordar esto, especialmente teniendo en cuenta el siguiente capítulo, en el que el usuario no siempre sabrá qué hace nuestra aplicación entre bambalinas. En esta etapa, nuestra aplicación está lista para la prueba. Cree y ejecute su aplicación en un dispositivo de prueba y pruébelo usted mismo!

Twitter, Facebook o Sina Weibo

Como mencioné anteriormente, una de las fortalezas del marco social es lo fácil que es reemplazar una red social por otra cambiando el tipo de servicio. Probemos esto reemplazando las dos instancias de SLServiceTypeFacebook con SLServiceTypeTwitter. Con este simple cambio, ahora podemos compartir nuestras imágenes con nuestros seguidores de Twitter.

Compartir en esteroides

Nuestra aplicación aún no está terminada. Todavía necesitamos implementar el compartir: método. En este método, hacemos uso de la UIActivityViewController Clase para compartir la imagen ajustada y el título asociado. Eche un vistazo a la implementación del método a continuación..

 - (IBAction) compartir: (id) remitente // Elementos de actividad UIImage * image = self.image; NSString * caption = self.captionTextField.text; NSArray * activityItems = @ [image, caption]; // Inicializar Activity View Controller UIActivityViewController * vc = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities: nil]; // Controlador de vista de actividad actual [self presentViewController: vc animated: YES completed: nil]; 

Primero almacenamos la imagen y el título en una matriz. La imagen y el título son los llamados. artículos de actividad, que se pasan como un argumento al inicializador designado de UIActivityViewController. Es importante pasar primero la imagen y luego el título. Puedes adivinar porque?

La belleza de la UIActivityViewController clase es que sabe cómo manejar los objetos de datos en la matriz de elementos de actividad.