Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Post to Facebook on iOS 6 in Objective-C using ACAccountStore class

I want to know how to post a status message to Facebook on iOS 6 using the new frameworks on Xcode 4.5. Thanks! :)

like image 270
jaytrixz Avatar asked Sep 20 '12 02:09

jaytrixz


3 Answers

Posting a message is rather simple. It's almost like with the Twitter Framework.

First you have to import the Frameworks: Social and Accounts

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

In your .h file:

SLComposeViewController *mySLComposerSheet;

This code has to be included inside your action in your .m file:

    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];
    }];
like image 88
Blade Avatar answered Oct 22 '22 02:10

Blade


And what do I have to do, when I just want to receive an alert in case the post was successful, and nothing when the user cancelled the post?

And unfortunately this does not work properly for Twitter... It doesn't dismiss the TweetSheet anymore. Here is my 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];
like image 24
Stephan König Avatar answered Oct 22 '22 03:10

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");
    }
}
like image 36
ashvin Avatar answered Oct 22 '22 03:10

ashvin