24

我想知道如何使用 Xcode 4.5 上的新框架在 iOS 6 上向 Facebook 发布状态消息。谢谢!:)

4

5 回答 5

75

发布消息相当简单。这几乎就像 Twitter 框架一样。

首先,您必须导入框架:社交和帐户

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

在您的 .h 文件中:

SLComposeViewController *mySLComposerSheet;

此代码必须包含在您的 .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];
    }];
于 2012-09-20T09:12:47.977 回答
1

当我只想在帖子成功的情况下收到警报,而当用户取消帖子时什么都没有,我该怎么办?

不幸的是,这不适用于 Twitter ......它不再关闭 TweetSheet。这是我的代码:

 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];
于 2013-05-24T18:46:29.217 回答
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");
    }
}
于 2015-10-10T04:28:50.580 回答
0

好的,所以我调整了原始帖子,适用于 iOS 6/7。更改 Facebook 的 ServiceType、警报标题和消息。享受!

- (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];
  }];
}
于 2013-12-21T06:17:20.427 回答
0

这就是我在我的应用程序中实际使用它的方式。更流畅,让控制器完成艰苦的工作。

- (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];
        }
  }];
}
于 2013-12-21T06:45:43.900 回答