LINE/Facebook/Twitter投稿

  • 87
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Xcode(プロジェクトの左のナビゲーターの一番上)->Targets->Build Settings->Link Binary With Libraries で、「Social.framework」を追加しておく。
また、iOS5でのTwitter投稿も共存させたいならば「Twitter.framework」も同様に追加しておく。

social.h
#import <Social/Social.h>
#import <Twitter/Twitter.h>
social.m
// LINE
- (IBAction)postLine:(id)sender {
    NSString* postContent = [NSString stringWithFormat:@"投稿内容"];
    [Line shareToLine:postContent];
}
// Facebook
- (IBAction)postFacebook:(id)sender {
    SLComposeViewController *facebookPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    NSString* postContent = [NSString stringWithFormat:@"投稿内容"];
    [facebookPostVC setInitialText:postContent];
    [facebookPostVC addURL:[NSURL URLWithString:@"url"]]; // URL文字列
    [facebookPostVC addImage:[UIImage imageNamed:@"image_name_string"]]; // 画像名(文字列)
    [self presentViewController:facebookPostVC animated:YES completion:nil];
}
// Twitter
- (IBAction)postTwitter:(id)sender {
    NSString* postContent = [NSString stringWithFormat:@"「%@」", _entry.title];
    NSURL* appURL = [NSURL URLWithString:_entry.link];
    // =========== iOSバージョンで、処理を分岐 ============
    // iOS Version
    NSString *iosVersion = [[[UIDevice currentDevice] systemVersion] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    // Social.frameworkを使う
    if ([iosVersion floatValue] >= 6.0) {
        SLComposeViewController *twitterPostVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        [twitterPostVC setInitialText:postContent];
        [twitterPostVC addURL:appURL]; // アプリURL
        [self presentViewController:twitterPostVC animated:YES completion:nil];
    }
    // Twitter.frameworkを使う
    else if ([iosVersion floatValue] >= 5.0) {
        // Twitter画面を保持するViewControllerを作成する。
        TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
        // 初期表示する文字列を指定する。
        [twitter setInitialText:postContent];
        // TweetにURLを追加することが出来ます。
        [twitter addURL:appURL];
        // Tweet後のコールバック処理を記述します。
        // ブロックでの記載となり、引数にTweet結果が渡されます。
        twitter.completionHandler = ^(TWTweetComposeViewControllerResult res) {
            if (res == TWTweetComposeViewControllerResultDone)
                NSLog(@"tweet done.");
            else if (res == TWTweetComposeViewControllerResultCancelled)
                NSLog(@"tweet canceled.");
        };
        // Tweet画面を表示します。
        [self presentModalViewController:twitter animated:YES];
    }
}

iOS6以降で導入された標準でのFacebook, Twitter連携を使った投稿と、iOS5以降で導入されたTwitter投稿が共存しています。iOS5の環境では、Social.frameworkは機能しないからです。
しかも、iOS6.0以上でないデバイスでこの処理を実行すると、クラッシュしてしまいます。(そもそもSocial.frameworkを読み込めない)

なので、Social.frameworkを追加したところで、Framework名の右に付いているパラメータを、「Required」から「Optional」に変更することで、とりあえずビルドは通るようになります。

さらに、iOS6以前のデバイスの場合には、例えばFacebookとTwitterの投稿ボタンを隠す等、iOSのバージョンによって条件分岐したいと思うので、以下のようにして実装するとよいでしょう。

social.m
@interface RankingViewController ()
{        
    // Social
    IBOutlet UIButton *LineButton;
    IBOutlet UIButton *FacebookButton;
    IBOutlet UIButton *TwitterButton;
}
- (void)viewDidLoad {
    [super viewDidLoad];

    // =========== iOSバージョンで、処理を分岐 ============
    // iOS Version
    NSString *iosVersion = 
        [[[UIDevice currentDevice] systemVersion] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    if ([iosVersion floatValue] < 6.0) { // iOSのバージョンが6.0以上でないときは、ボタンを隠す
        // Twitter,Facebook連携はiOS6.0以降
        FacebookButton.hidden = YES;
        TwitterButton.hidden = YES;
    }
    // ===============================================
}

ちなみに、LINEの処理はURLスキームを用いているだけで、Social.frameworkを使っていません。なので、iOS6以前でも使うことが出来ます。