lunes, 11 de julio de 2011

Tutorial para Añadir el SDK de Facebook Connect a Aplicaciones iOS. Segunda Parte


Si queréis saber para que sirve el SDK de Facebook Connect, así como el lugar en donde podéis encontrarlo y/o descargarlo, y/o si estáis interesados en saber la forma en la que podéis añadir el SDK de Facebook Connect a vuestro proyecto, os animo a consultar la primera parte de este tutorial. Ahora continuaré con la segunda y última parte.
El grueso del código debe añadirse en el fichero App Delegate.
Normalmente, una aplicación tendrá un lugar en el que exista un botón que permita al usuario comunicarse con Facebook. Podéis pensar que ese es el lugar en donde debería ir el código asociado al SDK de Facebook Connect, sin embargo, el uso del SDK por parte de cada usuario irá asociado a un objeto Facebook que al instanciarse lanzará una ventana de Safari en el dispositivo iOS que se use en cada caso, para pedir confirmación al usuario de cara a que vuestra aplicación acceda a parte de sus datos personales o para informarle de que ya ha sido dada dicha autorización en otro momento. Si el objeto Facebook que mantiene la conexión se destruye en algún instante, necesitará ser nuevamente instanciado y por tanto volverá a lanzar la anterior ventana de Safari tantas veces como se vuelva a instanciar el objeto Facebook. La forma de evitar este inconveniente para la experiencia del usuario pasa por implementar el objeto que mantenga la conexión con Facebook dentro de la clase App Delegate (que se destruirá sólo al terminar totalmente la aplicación). A continuación se muestra un ejemplo de como hacerlo.


// ExampleAppDelegate.h

#import <UIKit/UIKit.h>
#import "FBConnect.h"

@interface ExampleAppDelegate : NSObject <UIApplicationDelegate, FBDialogDelegate, FBSessionDelegate> {

    // Controls the connection to Facebook.
    Facebook *facebook;
    // Controls the permissions on Facebook of the application.
    NSArray *facebookPermissions;
    // Implements the window of the app.
    UIWindow *window;
    // Maintains the navigation controller that manage the navigation into the application.
    UINavigationController *navigationController;
}

@property (nonatomic, retain) Facebook *facebook;
@property (nonatomic, retain) NSArray *facebookPermissions;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@end

// ExampleAppDelegate.m

#import "ExampleAppDelegate.h"

@implementation ExampleAppDelegate

@synthesize facebook;
@synthesize facebookPermissions;
@synthesize window;
@synthesize navigationController;

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    // Add the navigation controller's view to the window and display.
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];

    return YES;
}

#pragma mark -
#pragma mark Facebook management

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    return [self.facebook handleOpenURL:url];
}

#pragma mark -
#pragma mark Memory management

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

   /* Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. */
}

- (void)dealloc {

   [self.facebook release];
   [self.facebookPermissions release];
   [self.navigationController release];
   [self.window release];

   [super dealloc];
}

@end

Accediendo al objeto que mantiene la conexión con Facebook desde cualquier clase de la aplicación.
La primera vez que se lance la aplicación automáticamente se pedirá memoria para el objeto Facebook de la clase App Delegate. Sólo falta establecer la conexión para el caso de cada usuario, y esto se hará la primera vez que el usuario pulse el botón que le permite interaccionar con Facebook. Para hacer esto último tendremos que recuperar el objeto Facebook de la clase App Delegate y asociarlo con la conexión que se pretenda establecer en cada caso. El siguiente código muestra cómo hacerlo, establece tres permisos cualesquiera (la lista completa de permisos con los que podrá contar cualquier aplicación la podéis consultar en el siguiente enlace, http://developers.facebook.com/docs/authentication/permissions) y lanza una cuadro de diálogo que incorpora cierta información y que puede completar cualquier usuario y publicar en su muro (la primera ocasión en la que se lance el citado cuadro de diálogo, pedirá primero los datos de conexión del individuo. La mayor parte de lo anterior puede verse también en un tutorial oficial publicado en el siguiente enlace, http://developers.facebook.com/docs/guides/mobile/#ios).


// ExampleClass.m

ExampleAppDelegate *appDelegate = (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate];

if (appDelegate.facebook == nil) {

appDelegate.facebook = [[Facebook alloc]                initWithAppId:@"here_you_must_enter_your_own_number"];
appDelegate.facebookPermissions =  [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", nil] retain];
[appDelegate.facebook authorize:appDelegate.facebookPermissions delegate:appDelegate];
}                

NSString* facebookMessage = @"example_message";
NSString *imageUrl = @"http://example.com/image.jpg";

NSMutableDictionary* facebookParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"here_you_must_enter_your_own_number", @"app_id",
@"http://example.com/", @"link",
imageUrl, @"picture",
self.name, @"name",
self.address, @"caption",
self.description, @"description",
facebookMessage,  @"message",
nil];

[appDelegate.facebook dialog:@"feed" andParams:facebookParams andDelegate:appDelegate];

Aquí acaba este tutorial. Os recomiendo visitar el enlace que os dejo entre paréntesis (http://developers.facebook.com/docs/guides/mobile/#ios) para comprender más acerca del método application: handleOpenURL: y conocer la forma en la que podéis obtener un identificador numérico como aplicaciones de Facebook para vuestras propias aplicaciones. Espero haber sido de ayuda.
Por si os la habéis perdido, aquí os enlazo la primera parte de este tutorial.

No hay comentarios:

Publicar un comentario