web-dev-qa-db-fra.com

Comment publier sur Facebook sur iOS 6 en Objective-C à l'aide de la classe ACAccountStore

Je souhaite savoir comment publier un message d'état sur Facebook sur iOS 6 à l'aide des nouveaux frameworks sur Xcode 4.5. Merci! :)

24
jaytrixz

Poster un message est plutôt simple. C'est presque comme avec le framework Twitter. 

D'abord, vous devez importer les cadres: social et comptes.

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

Dans votre fichier .h:

SLComposeViewController *mySLComposerSheet;

Ce code doit être inclus dans votre action dans votre fichier .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];
    }];
75
Blade

Et que dois-je faire lorsque je veux juste recevoir une alerte si le message a réussi, et rien lorsque l'utilisateur l'a annulée? 

Et malheureusement, cela ne fonctionne pas correctement pour Twitter ... Il ne rejette plus la TweetSheet. Voici mon code:

 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];
1
Stephan König
- (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");
    }
}
1
ashvin

Voici comment je l'utilise dans mon application. Lisse et laisse le contrôleur faire le travail difficile. 

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

Ok les gars, alors j'ai modifié le post original, fonctionne pour iOS 6/7. Modifier le type de service, le titre de l'alerte et le message pour Facebook. Prendre plaisir!

- (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
FrostyL