2012-09-20 7 views
24

Desidero sapere come pubblicare un messaggio di stato su Facebook su iOS 6 utilizzando i nuovi framework su Xcode 4.5. Grazie! :)Come postare su Facebook su iOS 6 in Objective-C utilizzando la classe ACAccountStore

+0

C'è bel set di tutorial qui: http://developers.facebook.com/docs/getting-started/getting-started-with-the-ios-sdk/ –

+0

No, volevo dire utilizzando i nuovi framework su iOS 6. – jaytrixz

+1

è possibile utilizzare il framework sociale per ulteriori dettagli visitare http://kmithi.blogspot.in/2012/10/integrating-facebook-and-twitter-in-ios.html – mithilesh

risposta

75

La pubblicazione di un messaggio è piuttosto semplice. È quasi come con il Twitter Framework.

Per prima cosa è necessario importare i quadri: sociali e Bilancio

#import <Social/Social.h> 
#import <Accounts/Accounts.h> 

Nel file .h:

SLComposeViewController *mySLComposerSheet; 

Questo codice deve essere inserito all'interno della vostra azione nel file .m:

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) //check if Facebook Account is linked 
    { 
     mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller 
     mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; //Tell him with what social platform to use it, e.g. facebook or twitter 
       [mySLComposerSheet setInitialText:[NSString stringWithFormat:@"Test",mySLComposerSheet.serviceType]]; //the message you want to post 
     [mySLComposerSheet addImage:yourimage]; //an image you could post 
     //for more instance methods, go here: https://developer.apple.com/documentation/social/slcomposeviewcontroller#//apple_ref/doc/uid/TP40012205 
     [self presentViewController:mySLComposerSheet animated:YES completion:nil]; 
    } 
    [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { 
     NSString *output; 
     switch (result) { 
      case SLComposeViewControllerResultCancelled: 
       output = @"Action Cancelled"; 
       break; 
      case SLComposeViewControllerResultDone: 
       output = @"Post Successful"; 
       break; 
      default: 
       break; 
     } //check if everything worked properly. Give out a message on the state. 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [alert show]; 
    }]; 
+0

@Blade thans. ma voglio condividere il messaggio senza foglio di azione come "TWRequest", quindi qual è il processo in facebook? – Hitarth

+0

@Blade Grt suggetion. funziona bene, ma ho una query quando invio di nuovo lo stesso messaggio di quello che sto ottenendo due popup. 1. Post successfull e 2. Il post non può essere inviato perché la connessione a Facebook fallisce. Voglio solo un popup in modo che l'utente ottenga l'idea. Da questo due utenti popup si confondono il successo del post o meno. Per favore suggeriscimi se hai qualche idea. – Hitarth

+1

@Blade possiamo cambiare "condiviso il collegamento tramite iOS" Per "condiviso il collegamento tramite MyAppName"? – Hitarth

1

e che cosa devo fare, quando voglio solo ricevere un avviso nel caso in cui il posto ha avuto successo, e nulla quando l'utente ha cancellato il post?

E sfortunatamente questo non funziona correttamente per Twitter ... Non rifiuta più il TweetSheet. Ecco il mio codice:

if(NSClassFromString(@"SLComposeViewController") != nil) 
{ 

     mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller 
     mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; //Tell him with what social plattform to use it, e.g. facebook or twitter 
     [mySLComposerSheet setInitialText:[NSString stringWithFormat:story.title,mySLComposerSheet.serviceType]]; //the message you want to post 
     [mySLComposerSheet addURL:[NSURL URLWithString:story.link]]; 
     //for more instance methodes, go here:https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/SLComposeViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40012205 
     [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { 
      NSString *output; 
      switch (result) { 
       case SLComposeViewControllerResultCancelled: 
        output = NSLocalizedStringFromTable(@"As it seems you didn't want to post to Twitter", @"ATLocalizable", @""); 
        break; 
       case SLComposeViewControllerResultDone: 
        output = NSLocalizedStringFromTable(@"You successfully posted to Twitter", @"ATLocalizable", @""); 
        break; 
       default: 
        break; 
      } //check if everything worked properly. Give out a message on the state. 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Twitter" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
      [alert show]; 
     }]; 
     [self presentViewController:mySLComposerSheet animated:YES completion:nil]; 
0

Ok ragazzi, quindi ho ottimizzato il post originale, funziona per iOS 6/7. Cambia ServiceType, Alert Title e Message per Facebook. Godere!

- (IBAction)tweetMessage:(id)sender { 


    if(![SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) //check if Facebook Account is linked 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unable to Tweet!" message:@"Please login to Twitter in your device settings." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [alert show]; 
     return; 
    } 
    //self.mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller 
    self.mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
    [self.mySLComposerSheet setInitialText:[NSString stringWithFormat:@"I found this Thing, check it out at this Place:\n %@ \n", [self someplace]]]; 
    [self.mySLComposerSheet addImage:self.photos.firstObject]; 

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

    [self.mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { 
     NSString *output; 
     switch (result) { 
       case SLComposeViewControllerResultCancelled: 
        output = @"Action Cancelled"; 
        break; 
       case SLComposeViewControllerResultDone: 
        output = @"Post Successfull"; 
        break; 
       default: 
        break; 
     } //check if everything worked properly. Give out a message on the state. 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Twitter" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
     [alert show]; 
    }]; 
} 
0

Questo è il modo in cui effettivamente lo uso nella mia app però. Più agevole e lascia che il controller faccia il duro lavoro.

- (IBAction)postToFacebook:(id)sender { 
    if(![SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) { 
     NSLog(@"log output of your choice here"); 
    } 
    // Facebook may not be available but the SLComposeViewController will handle the error for us. 
    self.mySLComposerSheet = [[SLComposeViewController alloc] init]; 
    self.mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
    [self.mySLComposerSheet setInitialText:[NSString stringWithFormat:@"I found this Thing, check it out at SomeWhere:\n %@ \n", [self someURLString]]]; 
    [self.mySLComposerSheet addImage:self.photos.firstObject]; //an image you could post 

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

    [self.mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) { 
     NSString *output; 
     switch (result) { 
       case SLComposeViewControllerResultCancelled: 
        output = @"Action Cancelled"; 
        break; 
       case SLComposeViewControllerResultDone: 
        output = @"Post Successfull"; 
        break; 
       default: 
        break; 
     } 
     if (![output isEqualToString:@"Action Cancelled"]) { 
       // Only alert if the post was a success. Or not! Up to you. 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; 
       [alert show]; 
     } 
    }]; 
} 
1
- (IBAction)btn_facebook:(id)sender { 

    SLComposeViewController *facebookcomposer = 
     [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; 
    [facebookcomposer setInitialText:@"This is just a test"]; 
    [facebookcomposer addURL:[NSURL URLWithString:@"http://www.google.com"]]; 
    [facebookcomposer addImage:[UIImage imageNamed:@"images.jpg"]]; 

    [self presentViewController:facebookcomposer animated:YES completion:nil]; 

    [facebookcomposer setCompletionHandler:^(SLComposeViewControllerResult result) 
    { 
     switch (result) 
     { 
      case SLComposeViewControllerResultDone: 
       NSLog(@"done"); 
       break; 
      case SLComposeViewControllerResultCancelled: 
       NSLog(@"cancelled"); 
       break; 

      default: 
      break; 
     } 

    }]; 

} 

- (IBAction)btn_twitter:(id)sender { 

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) { 
     SLComposeViewController *twitter = 
      [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

     [twitter setInitialText:@"this is just a test"]; 
     [twitter addURL:[NSURL URLWithString:@"http://www.google.com"]]; 
     [twitter addImage:[UIImage imageNamed:@"images.jpg"]]; 
     [self presentViewController:twitter animated:YES completion:nil]; 
    } else { 
     NSLog(@"it is not configured"); 
    } 
} 
Problemi correlati