2012-09-19 5 views

risposta

140

Per i dettagli su questo quadro si veda Apple Social Framework Class Reference

tutorial supplementari:

  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

Per questo esempio, utilizzeremo lo SLServiceTypeFacebookSLComposeViewController. Se si desidera utilizzare Twitter o Sina Weibo solo cambiare lo SLServiceType a uno dei seguenti:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6 ha reso molto facile per pubblicare direttamente su Facebook, Twitter o Sina Weibo utilizzando lo SLComposeViewController. Funziona in modo molto simile a iOS 5 TWTweetComposeViewController.

Prima di tutto, nel file di intestazione del controller vista (.h) #import il quadro sociale e il quadro di conti.

#import <Social/Social.h>

#import <Accounts/Accounts.h>

Qui dichiareremo un semplice UIButton e un IBAction che avremo in seguito link per quel pulsante e un void (sharingStatus) che sarà utilizzato per verificare che il servizio di condivisione selezionato è a disposizione.

@interface ViewController : UIViewController 

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

@implementation ViewController 

Poi, nel file di implementazione (.m), inizieremo con l'attuazione del (sharingStatus) vuoto che abbiamo dichiarato nel file di intestazione. sharingStatus utilizza di isAvailableForServiceType BOOL per restituire se è possibile pubblicare sul servizio specificato nel relativo argomento. In questo caso, useremo il tipo di servizio SLServiceTypeFacebook. Se il servizio è disponibile, il pulsante post sarà abilitato con un valore alfa di 1.0f, e se il servizio non è disponibile il pulsante verrà disabilitato il suo valore alfa impostato su 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; 
    } 
} 

Qui imposteremo il IBAction che richiamare il compositore. Per una buona pratica, controlleremo di nuovo isAvailableForServiceType per evitare di chiamare il compositore per un tipo di servizio che non è disponibile. (Nel caso in cui qualcosa è andato storto durante l'ultimo controllo, o se la disponibilità in qualche modo è cambiata nella frazione di secondo tra toccare il pulsante post e tutti i compositori/init. Il codice sotto è stato impostato per visualizzare un foglio di compositori di Facebook con testo, un'immagine e un collegamento Questa azione utilizza anche un gestore di completamento per i risultati annullati e completati del compositore.

- (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]; 
    } 
} 

In viewWillAppear saremo registrare un osservatore ACAccountStoreDidChangeNotification modo che l'applicazione può essere avvisati quando informativi conto dei cambiamenti. Questo osservatore verrà quindi rimosso in 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]; 
} 

E, infine, si aprono costruttore di interfaccia e aggiungere un UIButton che sarà il pulsante di posta. Quindi, nell'ispettore connessioni, collega lo IBOutlet e lo IBAction che abbiamo creato precedentemente al pulsante, e il gioco è fatto! Hai finito!

enter image description here

+1

Ciao, E 'stata una bella risposta, se ho piccolo dubbio, possiamo anche presenti interfaccia di login in account Twitter caso di utente/Facebook non è impostato su? –

+3

@AbhinandanSahgal no, non con questa classe. Tuttavia, quando funziona correttamente, il compositore rileva se l'utente non ha effettuato l'accesso e presenta un avviso per portarli alle impostazioni per il servizio appropriato per accedere al proprio account. –

+0

Puoi inserire un campione per portarli alle impostazioni? –

25

Basta utilizzare questo codice per condividere su 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]; 

Se si desidera questo per Twitter, basta cambiare SLServiceTypeTwitter.

+0

ricevo un problema con la pagina delle impostazioni con il tuo codice. – sabir

+0

@sabir Non ti ho preso. Puoi spiegarlo per favore? –

+1

quando l'account di Facebook è vuoto nel tuo dispositivo mostra l'avviso con le impostazioni e il pulsante Annulla quando faccio clic sul pulsante Impostazioni dovrebbe andare alla pagina delle impostazioni fino a IOS 6.01 ma in IOS 7 il pulsante impostazioni non mi porta a pagina di impostazioni. Quindi hai qualche idea su questo – sabir

13

uso sicuro di 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]; 
     }]; 
    }