Think Big Act Local

iPhone開発を軸にブレブレの記事を書いていきます。

画像やURLをFacebookやTwitter、LINEなどのSNSに共有する

f:id:himaratsu:20130501211542j:plain

FacebookTwitter、そしてLINEへの投稿機能を作ってみます。

FacebookTwitterへの投稿はiOS 6から実装されたSocial.frameworkを、
LINEへの投稿はURLスキームを使って実装します。

Facebookへの投稿(Social.framework)

Socialライブラリの提供するSLComposeViewControllerを
SLServiceTypeFacebookを指定して作成して使います。

// Social.frameworkをimport
#import <Social/Social.h>

// Facebookに投稿
- (void)postToFacebook {
    SLComposeViewController *vc = [SLComposeViewController
                                   composeViewControllerForServiceType:SLServiceTypeFacebook];
    [vc setInitialText:@"via Think Big Act Local"];
    [vc addImage:resultImage];
    [vc addURL:[NSURL URLWithString:@"http://himaratsu.hatenablog.com/"]];
    [self presentViewController:vc animated:YES completion:nil];
}

実行結果

f:id:himaratsu:20130501211849p:plain

このように表示されます。
位置情報の追加や公開範囲の設定をした上で、Facebookのウォールに投稿できます。

Twitterへの投稿(Social.framework)

Facebookへの投稿と同じくSLComposeViewControllerを使います。
SLServiceTypeTwitterを指定します。

// Twitterに投稿
- (void)postToTwitter {
    SLComposeViewController *vc = [SLComposeViewController
                                   composeViewControllerForServiceType:SLServiceTypeTwitter];
    [vc setInitialText:@"via Think Big Act Local"];
    [vc addImage:_resultImage];
    [vc addURL:[NSURL URLWithString:@"http://himaratsu.hatenablog.com/"]];
    [self presentViewController:vc animated:YES completion:nil];
}

実行結果

f:id:himaratsu:20130501212534p:plain

このように表示されます。
Facebookへの投稿時と同じく位置情報を付加できる他、
アカウント名の箇所をタッチするとTwitterアカウントを切り替えられます。

LINEへの投稿(URLスキーム)

URLスキームの使い方

公式サイトを参考に設置します。
設置方法 | LINEで送るボタン

データ形式 URLスキーム 注意
テキスト line://msg/text/{テキスト内容} パーセントエンコーディングする
画像 line://msg/image/{画像データ} PasteBoardを使ってデータを指定

今回は画像データを送信します。

// LINEに投稿
- (void)postToLine {
    // この例ではUIImageクラスの_resultImageを送る
    UIPasteboard *pasteboard = [UIPasteboard pasteboardWithUniqueName];
    [pasteboard setData:UIImagePNGRepresentation(_resultImage) 
  forPasteboardType:@"public.png"];
    
    // pasteboardを使ってパスを生成
    NSString *LineUrlString = [NSString stringWithFormat:@"line://msg/image/%@", 
               pasteboard.name];
    
    // URLスキームを使ってLINEを起動
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:LineUrlString]];
}

※ 2014/05/22 追記
iOS 7以降ではpasteboardの仕様変更により、以下のように取得する必要があるようです。

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

id:koogawa さんにコメント欄にて教えて頂きました。ありがとうございます!

実行結果

f:id:himaratsu:20130501214459p:plain

友だちやグループ、LINEホームに投稿できます。

以上、Social.frameworkとURLスキームを使った他サービスへの投稿方法でした。

参考リンク

おすすめ書籍

iPhoneアプリ開発入門におすすめの一冊。
Objective-Cの基本的な文法や特徴をマスターできます。