イッツァハローワールド

恥さらしていこうかなとか。

(iOS)備忘録 SLComposeViewControllerを利用したSNS連携

ブログ書くの時間かかる。。。くうう。。
本日はSNS連携の備忘録

耐えマーでもtwitter連携やっていますが、今回はfacebook連携についても記載。
耐えマーのバージョンアップでfacebook加えようかなとか。

とりあえず画面用意します。

f:id:hanamiju:20141029213342p:plain

だいぶ適当。
今回はtwitterアイコン押すとtwitterの投稿ダイアログが、
facebookアイコン押すとfacebookの投稿ダイアログが表示される仕様ですすめる。

まずはヘッダファイル
#import <Social/Social.h>

コイツを入れる。twitterだけの場合だったら

#import <Twitter/Twitter.h>

でもオーライ。

まずはtwitter投稿
- (IBAction)tweetButtonPushed:(id)sender {
    //
    SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    
    // 送信文字列(140文字)
    NSString* message = @"今日は29の日うぇうぇうぇうぇうぇうぇーーーーっっっw #テスト";
    
    // 文字列をセット
    [vc setInitialText:message];
    
    // URLをPOSTする場合
    [vc addURL:[NSURL URLWithString:@"http://matome.naver.jp/odai/2138561901190627201"]];

    // 画像をPOSTする場合
    [vc addImage:[UIImage imageNamed:@"29.png"]];
    
    // [CANCEL]ボタンなどのイベントハンドラ定義
    vc.completionHandler = ^(SLComposeViewControllerResult res) {
        [self dismissViewControllerAnimated:YES completion:nil];
    };
    // 送信View表示
    [self presentViewController:vc animated:YES completion:nil];
}

29の日を祝うありふれたツイート。URLは焼き肉のおいしい焼き方のリンク、加えておいしそうな肉の画像を添付。
f:id:hanamiju:20141029214559p:plain

流れとしては、SLComposeViewControllerをつくって、tweetに必要な要素を登録していく感じ。

下の方にあるblocksに何入れればいいか分からなくて困った。
completionHandlerのリファレンス読むと

// Specify a block to be called when the user is finished. This block is not guaranteed
// to be called on any particular thread. It is cleared after being called.
@property (nonatomic, copy) SLComposeViewControllerCompletionHandler completionHandler;

ってあって、
たぶん、終了やらキャンセル時の処理をblocksで入れとけコラってことだと思う。なるほど。

ということで、実行してtwitterアイコンをタップすると、こんな画面が。
f:id:hanamiju:20141029214510p:plain

アカウントが登録されていないときの警告ですな。
別にそんな警告な実装はしていなくてもこういった画面が出てくれて大変楽。

そんで登録するとこんな画面に。
f:id:hanamiju:20141029214916p:plain
あれれ、リンクが記載されていないんですけど...

まあいいやということで実際のツイートを見てみる。

しっかりリンクが張られてました!

Facebook投稿

ほとんどtwitterの時と一緒。

- (IBAction)fbbuttonPushed:(id)sender
{
    SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    
    // 送信文字列
    NSString* message = @"今日は29の日うぇうぇうぇうぇうぇうぇーーーーっっっw #テスト";
    
    // 文字列をセット
    [vc setInitialText:message];
    
    // URLをPOSTする場合
    [vc addURL:[NSURL URLWithString:@"http://matome.naver.jp/odai/2138561901190627201"]];
    // 画像をPOSTする場合
    [vc addImage:[UIImage imageNamed:@"29.png"]];
    
    // [CANCEL]ボタンなどのイベントハンドラ定義
    vc.completionHandler = ^(SLComposeViewControllerResult res) {
        [self dismissViewControllerAnimated:YES completion:nil];
    };
    // 送信View表示
    [self presentViewController:vc animated:YES completion:nil];
}

facebookアイコンを押すとこんなダイアログが出ます。
f:id:hanamiju:20141029215338p:plain

ちょっとtwitterの時と違う。
アルバムやら、位置情報やら、公開範囲の指定がデフォルトで可能っぽい。
facebookではテストしてないけど。

とりあえずこんなかんじ。簡単なことしたいだけだったら非常に楽。