SLComposeViewController共享教程[关闭]


Answers:


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

在此示例中,我们将使用SLComposeViewControllerSLServiceTypeFacebook。如果您想使用Twitter或SinaWeibo,只需将SLServiceType更改为以下之一:

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6使使用轻松直接发布到Facebook,Twitter或新浪微博非常容易SLComposeViewController。这与iOS 5的工作原理非常相似TWTweetComposeViewController

首先,在视图控制器的头文件(.h)中#import,单击“社交框架”和“帐户框架”。

#import <Social/Social.h>

#import <Accounts/Accounts.h>

在这里,我们将声明一个简单UIButtonIBAction,然后将其链接到该按钮,并声明一个void(sharingStatus),它将用于检查所选共享服务是否可用。

@interface ViewController : UIViewController

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

@implementation ViewController

然后,在实现文件(.m)中,我们将从实现在头文件中声明的(sharingStatus)void开始。SharingStatus使用SLComposeViewControllerisAvailableForServiceTypeBOOL返回是否可以发布到其参数中指定的服务。在这种情况下,我们将使用服务类型SLServiceTypeFacebook。如果该服务可用,则发布按钮将使用1.0f的alpha值启用;如果该服务不可用,则按钮将被禁用,其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再次检查以避免为不可用的服务类型调用作曲家。(以防万一在上次检查时出了点问题,或者在点击发布按钮和作曲家all / init之间的可用性在短短的一秒钟内发生了变化。下面的代码已设置为显示带有文字的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将成为发布按钮的按钮。然后在连接检查器中,将IBOutletIBAction我们之前创建的链接到按钮,就是这样!你完成了!

在此处输入图片说明


1
嗨,这是一个很好的答案,尽管我对此表示怀疑,但是如果未设置用户的twitter / Facebook帐户,我们还可以提供登录界面吗?
Abhinandan Sahgal

3
@AbhinandanSahgal不,不参加此类课程。但是,在正常工作时,作曲家将检测用户是否未登录,并提示用户将其引导至相应服务的设置,以登录其帐户。
Mick MacCallum

1
@AbhinandanSahgal对不起,但我不能。如果您尚未登录,这是一种内置行为,应该会自动运行。此外,Apple曾经提供用于将用户发送到首选项应用程序的API,但在iOS 5.1中已删除:(
Mick MacCallum

7
使用Social.framework时无需链接到Accounts.framework。另外,检查服务是否可用可能也是不利的,因为操作系统将自动执行此操作,并且会失败并显示带有“设置”按钮的警报。
martinjbaker

1
请勿进行[SLComposeViewController isAvailableForServiceType:...]检查,如果未在“设置”应用中设置该服务,则框架将弹出警报,指出该问题以及进入设置的按钮。
2014年

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。


代码出现“设置”页面问题。
sabir

@sabir我不明白你的意思,你能解释一下吗?
沙漠玫瑰

1
当您的设备上的Facebook帐户为空时,它会显示带有设置和取消按钮的警报,当我单击“设置”按钮时,它应该转到设置页面,在IOS 6.01或更高版本中仍能正常工作,但在IOS 7中,“设置”按钮不会带我进入设置page.so您对此有任何想法吗
sabir 2014年

1
您是否已在设备上对其进行了测试?在模拟器中,此问题也在ios 6中出现。
沙漠玫瑰

[controllerSLC setInitialText:@“ ..”]; 现在已弃用。
Vicky 2015年

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];
        }];
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.