77

我需要遵循哪些步骤才能使用 iOS 6 的新版本SLComposeViewController发布到 Facebook、Twitter 或新浪微博?

4

3 回答 3

141

有关此框架的详细信息,请参阅 Apple 的社交框架类参考

附加教程:

  1. http://soulwithmobiletechnology.blogspot.com/2012/07/tutorial-how-to-use-inbuilt.html
  2. http://www.mobile.safilsunny.com/iphone/integrating-facebook-ios/
  3. https://rudeboy-quickies.blogspot.com/2012/06/steps-to-integrate-facebook-in-ios6.html

对于这个例子,我们将使用SLComposeViewController's SLServiceTypeFacebook。如果您想使用 Twitter 或新浪微博,只需将 SLServiceType 更改为以下之一:

  • SLServiceTypeFacebook
  • SLServiceType新浪微博
  • SLServiceTypeTwitter

iOS 6 让使用SLComposeViewController. 这与 iOS 5 的TWTweetComposeViewController.

首先,在您的视图控制器的头文件 (.h)#import中,Social Framework 和 Accounts Framework。

#import <Social/Social.h>

#import <Accounts/Accounts.h>

在这里,我们将声明一个 simpleUIButton和 an IBAction,稍后我们将链接到该按钮和一个void(sharingStatus),它将用于检查所选共享服务是否可用。

@interface ViewController : UIViewController

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

@implementation ViewController

然后,在您的实现文件 (.m) 中,我们将首先实现我们在头文件中声明的 (sharingStatus) void。sharedStatus 使用BOOL 返回您是否可以发布到其参数中指定的服务SLComposeViewControllerisAvailableForServiceType在这种情况下,我们将使用服务类型SLServiceTypeFacebook。如果服务可用,则发布按钮将启用,alpha 值为 1.0f,如果服务不可用,则按钮将被禁用,其 alpha 值设置为 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;
    }
}

在这里,我们将设置IBAction将调用作曲家。为了获得良好的实践,我们将isAvailableForServiceType再次检查以避免调用作曲家以获取不可用的服务类型。(以防在上次检查期间出现问题,或者在点击发布按钮和作曲家全部/初始化之间的几分之一秒内可用性发生了某种变化。下面的代码已设置为显示带有文本的 Facebook 作曲家表,一个图像和一个链接。此操作还利用完成处理程序来处理作曲家的取消和完成结果。

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

viewWillAppear我们将注册一个观察者,以便在ACAccountStoreDidChangeNotification帐户信息更改时通知应用程序。然后这个观察者将被删除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];
}

最后,打开界面生成器并添加一个UIButton作为发布按钮的按钮。然后在连接检查器中链接IBOutlet我们IBAction之前创建的按钮,就是这样!你完成了!

在此处输入图像描述

于 2012-09-19T21:37:28.273 回答
25

只需使用此代码在 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];

如果您希望 Twitter 使用此功能,则只需更改 SLServiceTypeTwitter。

于 2013-02-15T09:06:39.637 回答
13

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];
        }];
    }
于 2013-06-20T06:28:39.687 回答