LoginSignup
82
83

More than 5 years have passed since last update.

LINE/Facebook/Twitter投稿

Last updated at Posted at 2013-01-16

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以前でも使うことが出来ます。

82
83
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
83