読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

ios Socialフレームワークでtwitter,facebookへ共有機能を実装する

ios objective-c xcode

アレが落ち着いたので、iosアプリの開発再開!

やっぱりtwitter,facebookへの共有機能つけたいと思い、実装してみました。
実装方法は、使っていた入門書にあったSocial.frameworkを使ってみました。

いろいろ細かい連携が必要な時は、facebookなんかはsdkとかを使うっぽい。


まずは共有だけなので、Social.frameworkでイキマス。


手順的には、

  • Social.frameworkを追加

 xcodeの「linked frameworkes and libraries」からSocial.frameworkを追加
 FrameworksディレクトリにSocial.frameworkが追加されます。

  • Social.frameworkをインポート

 対象の.mファイルにいつも通りのこれを

#import <Social/Social.h>
  • ツイート、シェアボタン作る

 storyboardでそれぞれボタンを置いて、
 ボタンを押した際、それぞれmakeTweet,makeShareというメソッドが呼ばれるようにアクションを追加。

  • ボタン押した際のコード実装

 
 まずはtwitter

- (IBAction)makeTweet:(id)sender {
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ツイートエラー"
                                                        message:@"Twitterアカウントが設定されていません。"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
        return;
    }

    NSString *text = @"hogehoge";
    NSURL *URL = [NSURL URLWithString:@"hogehoge"];
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"hogehoge"]];
    SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    [controller setInitialText:text];
    [controller addURL:URL];
    [controller addImage:[[UIImage alloc] initWithData:imageData]];
    controller.completionHandler =^(SLComposeViewControllerResult result){
        [self dismissViewControllerAnimated:YES completion:nil];
    };
    [self presentViewController:controller animated:YES completion:nil];
}

 次にfacebookのシェア

- (IBAction)makeShare:(id)sender {
    if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"シェアエラー"
                                                        message:@"facebookアカウントが設定されていません。"
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"OK", nil];
        [alert show];
        return;
    }

    NSString *text = @"hogehoge";
    NSURL *URL = [NSURL URLWithString:@"hogehoge"];
    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"hogehoge"]];
    SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [controller setInitialText:text];
    [controller addURL:URL];
    [controller addImage:[[UIImage alloc] initWithData:imageData]];
    controller.completionHandler =^(SLComposeViewControllerResult result){
        [self dismissViewControllerAnimated:YES completion:nil];
    };
    [self presentViewController:controller animated:YES completion:nil];

内容はサービスのタイプを変更してるだけです。
今回は特になにもしていないですが、共有完了後のメソッドなど用意すれば、
マンガボックス的な共有したら、○○できるよ!的なのも実装できそうです。



とりあえずアプリの機能は揃ってきたので、あとはデザインとかを・・・!




感謝致します。
f:id:ogataka50:20140530202720j:plain