2012-09-19 12 views

Respuesta

140

Para más detalles sobre este marco consulte Social Framework Class Reference

tutoriales adicionales de Apple:

  1. http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
  2. http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
  3. http://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html
  4. https://developer.apple.com/videos/wwdc/2012/?id=306

Para este ejemplo, usaremos SLComposeViewController 's SLServiceTypeFacebook. Si desea utilizar Twitter o SinaWeibo acaba de cambiar el SLServiceType a uno de los siguientes:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 ha hecho que sea muy fácil de enviar directamente a Facebook, Twitter o Sina Weibo usando el SLComposeViewController. Esto funciona de manera muy similar a iOS 5 TWTweetComposeViewController.

Primero, en su vista el archivo de encabezado del controlador (.h) #import el Marco Social y el Marco de Cuentas.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Aquí vamos a declarar una sencilla UIButton y un IBAction que veremos más adelante enlace a ese botón y un (sharingStatus) void que se utiliza para comprobar que el servicio para compartir seleccionada es disponible.

@interface ViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UIButton *easyFacebookButton; 
- (IBAction)facebookPost:(id)sender; 
- (void)sharingStatus; 
@end 

@implementation ViewController 

A continuación, en el archivo de aplicación (.m), vamos a empezar por la aplicación del vacío (sharingStatus) que declara en el archivo de cabecera. sharingStatus usa SLComposeViewController's isAvailableForServiceType BOOL para devolver si puede o no publicar en el servicio especificado en su argumento. En este caso, utilizaremos el tipo de servicio SLServiceTypeFacebook. Si el servicio está disponible, el botón de publicación se habilitará con un valor alfa de 1.0f, y si el servicio no está disponible, el botón se desactivará con su valor alfa establecido en 0.5f.

- (void)sharingStatus { 
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { 
     NSLog(@"service available"); 
     self.easyFacebookButton.enabled = YES; 
     self.easyFacebookButton.alpha = 1.0f; 
    } else { 
     self.easyFacebookButton.enabled = NO; 
     self.easyFacebookButton.alpha = 0.5f; 
    } 
} 

Aquí vamos a configurar el IBAction que llamar al compositor. Como buena práctica, revisaremos isAvailableForServiceType nuevamente para evitar llamar al compositor para un tipo de servicio que no está disponible. (En caso de que algo haya fallado durante el último control, o si la disponibilidad cambió de alguna manera en la fracción de segundo entre presionar el botón de publicar y los compositores all/init. El código siguiente se configuró para mostrar una hoja de compositores de Facebook con texto, una imagen y un enlace. Esta acción también utiliza un controlador de finalización para los resultados cancelados y hechos del compositor.

- (IBAction)facebookPost:(id)sender { 

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { 

     SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 

     [mySLComposerSheet setInitialText:@"iOS 6 Social Framework test!"]; 

     [mySLComposerSheet addImage:[UIImage imageNamed:@"myImage.png"]]; 

     [mySLComposerSheet addURL:[NSURL URLWithString:@"http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"]]; 

     [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { 

      switch (result) { 
       case SLComposeViewControllerResultCancelled: 
        NSLog(@"Post Canceled"); 
        break; 
       case SLComposeViewControllerResultDone: 
        NSLog(@"Post Sucessful"); 
        break; 

       default: 
        break; 
      } 
     }]; 

     [self presentViewController:mySLComposerSheet animated:YES completion:nil]; 
    } 
} 

En viewWillAppear nos registraremos un observador a ACAccountStoreDidChangeNotification lo que la aplicación puede ser notificado cuando cuenta los cambios de información. Este observador se eliminará en viewDidDisappear.

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sharingStatus) name:ACAccountStoreDidChangeNotification object:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
    [[NSNotificationCenter defaultCenter] removeObserver:ACAccountStoreDidChangeNotification]; 
} 

Y, por último, se abren constructor de interfaces y añadir un UIButton que será el botón de entrada. Luego, en el inspector de conexiones, vincule el IBOutlet y el IBAction que creamos anteriormente con el botón, ¡y listo! ¡Terminaste!

enter image description here

+1

Hola, Fue una respuesta agradable, aunque tengo pequeña duda, puede también presentes interfaz de inicio de sesión en/cuenta de Facebook twitter caso del usuario no está configurado ¿arriba? –

+3

@AbhinandanSahgal no, no con esta clase. Sin embargo, cuando funciona correctamente, el compositor detectará si el usuario no ha iniciado sesión y presentará una alerta para llevarlos a la configuración del servicio apropiado para iniciar sesión en su cuenta. –

+0

¿Puedes poner una muestra para llevarlos a la configuración? –

25

sólo tiene que utilizar este código para compartir en Facebook.

SLComposeViewController *controllerSLC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
[controllerSLC setInitialText:@"First post from my iPhone app"]; 
[controllerSLC addURL:[NSURL URLWithString:@"http://www.appcoda.com"]]; 
[controllerSLC addImage:[UIImage imageNamed:@"test.jpg"]]; 
[self presentViewController:controllerSLC animated:YES completion:Nil]; 

Si desea esto para Twitter, simplemente cambie SLServiceTypeTwitter.

+0

Estoy recibiendo un problema de la página de configuración con su código. – sabir

+0

@sabir No te conseguí. ¿Puedes explicarlo por favor? –

+1

cuando la cuenta de Facebook está vacía en su dispositivo, muestra la alerta con la configuración y el botón cancelar cuando hago clic en el botón de configuración, debería ir a la página de configuración, funciona bien hasta IOS 6.01 pero en IOS 7 el botón de configuración no me lleva a configuración página.so tiene alguna idea sobre esto – sabir

13

uso seguro de SLComposeViewController

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 
    { 
     SLComposeViewController *fbPost = [SLComposeViewController 
               composeViewControllerForServiceType: SLServiceTypeFacebook]; 
     [fbPost setInitialText:@"Text You want to Share"]; 
     [fbPost addImage:[UIImage imageNamed:@"shareImage.png"]]; 
     [self presentViewController:fbPost animated:YES completion:nil]; 
     [fbPost setCompletionHandler:^(SLComposeViewControllerResult result) { 
      switch (result) { 
       case SLComposeViewControllerResultCancelled: 
        NSLog(@"Post Canceled"); 
        break; 
       case SLComposeViewControllerResultDone: 
        NSLog(@"Post Sucessful"); 
        break; 
       default: 
        break; 
      } 
      [self dismissViewControllerAnimated:YES completion:nil]; 
     }]; 
    }