web-dev-qa-db-ja.com

SLComposeViewController共有のチュートリアル

IOS 6の新しいSLComposeViewControllerを使用してFacebook、Twitter、またはSina Weiboに投稿するために必要な手順は何ですか?

76
Mick MacCallum

このフレームワークの詳細については、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またはSinaWeiboを使用する場合は、SLServiceTypeを次のいずれかに変更してください。

  • SLServiceTypeFacebook
  • SLServiceTypeSinaWeibo
  • SLServiceTypeTwitter

iOS 6では、SLComposeViewControllerを使用してFacebook、Twitter、またはSina Weiboに直接投稿することが非常に簡単になりました。これは、iOS 5のTWTweetComposeViewControllerと非常によく似ています。

まず、View Controllerのヘッダーファイル(.h)#import Social FrameworkおよびAccounts Frameworkで。

#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は、SLComposeViewControllerisAvailableForServiceType BOOLを使用して、引数で指定されたサービスに投稿できるかどうかを返します。この場合、サービスタイプSLServiceTypeFacebookを使用します。サービスが利用可能な場合、投稿ボタンは1.0fのアルファ値で有効になり、サービスが利用できない場合、ボタンはアルファ値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を再度チェックして、利用できないサービスタイプに対してcomposerを呼び出さないようにします。 (最後のチェックで問題が発生した場合、または投稿ボタンと作曲家all/initをタップする間に1秒未満で可用性が何らかの形で変化した場合。以下のコードは、テキスト付きの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をボタンにリンクします。できました!

enter image description here

141
Mick MacCallum

このコードを使用して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を変更するだけです。

25
Desert Rose

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];
        }];
    }
13
A R