【问题标题】:Tutorial for SLComposeViewController sharing [closed]SLComposeViewController 共享教程 [关闭]
【发布时间】:2012-09-19 21:37:28
【问题描述】:

我需要遵循哪些步骤才能使用 iOS 6 的新 SLComposeViewController 在 Facebook、Twitter 或新浪微博上发帖?

【问题讨论】:

    标签: ios ios6 slcomposeviewcontroller social-framework


    【解决方案1】:

    有关此框架的详细信息,请参阅 Apple 的Social Framework Class Reference

    其他教程:

    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 或新浪微博,只需将 SLServiceType 更改为以下之一即可:

    • SLServiceTypeFacebook
    • SLServiceType新浪微博
    • SLServiceTypeTwitter

    iOS 6 让使用SLComposeViewController 直接发布到 Facebook、Twitter 或新浪微博变得非常容易。这与 iOS 5 的 TWTweetComposeViewController 非常相似。

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

    #import <Social/Social.h>

    #import <Accounts/Accounts.h>

    在这里,我们将声明一个简单的UIButton 和一个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 使用SLComposeViewControllerisAvailableForServiceType BOOL 返回您是否可以发布到其参数中指定的服务。在这种情况下,我们将使用服务类型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,这将是发布按钮。然后在连接检查器中将我们之前创建的IBOutletIBAction 链接到按钮,就是这样!大功告成!

    【讨论】:

    • 嗨,这是一个很好的答案,虽然我有一点疑问,如果用户的 twitter/Facebook 帐户没有设置,我们是否也可以提供登录界面?
    • @AbhinandanSahgal 不,这门课没有。但是,当工作正常时,作曲家将检测用户是否未登录并显示警报,以将他们带到相应服务的设置以登录到他们的帐户。
    • @AbhinandanSahgal 抱歉,我不能。这是内置行为,如果您尚未登录,应该会自动运行。此外,Apple 曾经提供 API 用于将用户发送到首选项应用程序,但它在 iOS 5.1 中被删除:(
    • 使用Social.framework时无需链接Accounts.framework。此外,检查服务是否可用也可能是不利的,因为操作系统会自动执行此操作并失败并显示带有设置按钮的警报。
    • 不要做 [SLComposeViewController isAvailableForServiceType:...] 检查,如果该服务未在设置应用程序中设置,框架将弹出一个警报,说明该问题以及一个按钮进入设置。
    【解决方案2】:

    只需使用此代码在 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 我没听明白。你能解释一下吗?
    • 当您的设备中的 Facebook 帐户为空时,当我单击设置按钮时,它会显示带有设置的警报和取消按钮,它应该进入设置页面,它在 IOS 6.01 中工作正常,但在 IOS 7 设置中按钮不会带我进入设置页面。所以你对此有任何想法吗
    • 你在设备上测试过吗?在模拟器中这个问题也出现在 ios 6 中。
    • [controllerSLC setInitialText:@".."];现已弃用。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-25
      • 2014-03-05
      • 2012-04-24
      • 2010-09-06
      • 2011-05-18
      • 2012-06-02
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多