thxou

Ama la sabiduría. Desea el conocimiento.

Trabajando Con El Social Framework De iOS 6: Publicar en Twitter Y Facebook

| Comments

Aquí les traigo un tutorial bastante fresco sobre el recién nacido iOS 6. Como sabéis cada nuevo iOS trae consigo muchas novedades y este no va a ser la excepción, tenemos cientos de nuevas APIs y cambios con respecto a iOS 5, y por si fuera poco también tenemos 3 nuevos frameworks para estudiar e implementar en nuestras apps. Queda aún trabajo por hacer.

Hoy voy a comenzar con el primero de una serie de tutoriales para ir introduciéndonos en el mundillo de iOS 6 poco a poco. Empezaré con uno de los 3 nuevos frameworks que incluye este nuevo iOS: el Social Framework.

Este framework reemplaza al de Twitter y se hace más generico para ser compatible con las redes sociales de Facebook y Sina Weibo (la de los chinos). Lo genial es que implementarlo en nuestras apps es sencillo, nosotros de momento vamos a publicar nuestro estado en Twitter y Facebook a través de la interfaz nativa del framework. Tiene otras aplicaciones como mostrar el timeline y hacer follows en Twitter y cosas así, pero estas las veremos más adelante ya que son un poco (y solo un poco) más complejas.

Una de las 2 clases que componen el Social Framework es SLComposeViewController, esta clase te permite mostrar una vista al usuario desde la cual el puede componer y publicar un mensaje en cualquiera de las redes sociales mencionadas arriba, incluyendo una imagen o URL con el mensaje.

Empezando con iOS 6 y el framework

Lo primero es tener Xcode 4.5 y el SDK de iOS 6 instalado, luego tener una cuenta de facebook y/o twitter configurada en el dispositivo.

Abrimos Xcode 4.5 y añadimos el Social Framework a nuestro proyecto. Para esto como ya sabemos nos vamos a la raiz del proyecto, seleccionamos nuestro target y en la pestaña Summary encontraremos el apartado Linked Frameworks and Libraries desde donde podemos agregarlo.

Acto seguido importamos en nuestro controlador la correspondiente cabecera y ya estamos listo para empezar a usarlo:

1
#import <Social/Social.h>

Diferencias con el framework de Twitter

Este nuevo framework es casi idéntico al anterior de Twitter, a grandes razgos la única diferencia que vamos a encontrar es en la forma de inicializar la clase, ya que en esta nueva tenemos que especificar el tipo de servicio al que nos estamos refiriendo, este servicio está definido en la propiedad serviceType y puede tener los siguientes valores:

  • SLServiceTypeFacebook
  • SLServiceTypeTwitter
  • SLServiceTypeSinaWeibo

Uno para cada red social, vamos. Por lo tanto, mientras en el de Twitter hacíamos una inicialización normal con alloc e init, en este nuevo le pasamos el servicio, de manera que nos queda así:

1
SLComposeViewController *twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

Luego hay que hacer la comprobación de que el servicio es accesible y de si hay por lo menos una cuenta configurada para ese servicio en concreto en el dispositivo:

1
[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter];

Esto devuelve YES o NO dependiendo de la configuración que haya. Si nos devuelve YES vamos a mostrar la interfaz, de lo contrario mostraremos un error.

Mostrando la interfaz

Supongamos que todo ha ido bien hasta ahora en el código, pues ya estamos listos para mostrar al usuario la intefaz, así que primero vamos a dar algunos valores iniciales a los campos. Este paso si que es idéntico al del framework de Twitter ya que tiene las mismas propiedades con los mismos nombres:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ponemos un texto inicial para la publicación
[twitter setInitialText:self.tvPost.text];

// añadimos una imagen a nuestra publicación
[twitter addImage:[UIImage imageNamed:@"logo_thxou.png"]];

// añadimos también una URL
[twitter addURL:[NSURL URLWithString:@"http://blog.thxou.com/2012/08/07/ios-enviar-correo-electronico-desde-la-aplicacion/"]];

// asignamos el completionHandler para manipular los resultados del envío
[twitter setCompletionHandler:completionHandler];

// por último mostramos la interfaz de publicación
[self presentViewController:twitter animated:YES completion:nil];

Tener muy en cuenta de asignar las propiedades antes de presentar la vista al usuario, de lo contrario os va a retornar un NO y la imagen o URL no se va a cargar junto con el mensaje. También os puede retornar NO si la imagen es demasiado grande o si hay demasiados caracteres en la URL, no obstante esto depende de las restricciones de que Twitter y Facebook ponen en las respectivas páginas oficiales de sus APIs.

Hecho todo esto presentamos al usuario la interfaz como lo haríamos con cualquier controlador.

Manipular los resultados

Lo único que nos queda por hacer es comunicarle al usuario si se ha enviado correctamente la publicación o no, para esto tenemos los resultados del envío devueltos en el argumento result de la propiedad completionHandler de la clase. Esta propiedad es un objeto de tipo bloque y es llamada justo antes de cerrase la interfaz de envío. Ya que el bloque es lo último que se va a ejecutar, tenemos que cerrar la interfaz dentro de este bloque:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// manipulamos los mensajes de error si hay usando la propiedad completionHandler
SLComposeViewControllerCompletionHandler completionHandler = ^(SLComposeViewControllerResult result)
{
    switch (result) {
        case SLComposeViewControllerResultCancelled:
            NSLog(@"La publicación ha sido cancelada.");
            break;
        case SLComposeViewControllerResultDone:
            NSLog(@"Se ha publicado satisfactoriamente.");
            break;
        default:
            break;
    }

    [self dismissViewControllerAnimated:YES completion:nil];
};

Conclusión

Como hemos podido observar es realmente sencillo mostrar la interfaz de envío por defecto al usuario. No obstante esto tiene sus limitaciones evidentes, como la de querer saltarse la interfaz y enviar directamente el mensaje a Twitter. En el siguiente tutorial veremos como hacer todo esto y alguna cosa más, es un poco más complejo, pero como veréis el framework lo hace todo mucho más sencillo y hace mucho trabajo por nosotros.

Comments