bekkou68 の日記

Gogengo! や IT 技術など。

ShareKit を CocoaPods でインストールして Twitter と Facebook に共有する(XCode/Objective-C)

はじめに

ShareKit のセットアップにだいぶ苦労したのでこのエントリに書き刻んで記録します。ゴリゴリ。

ゴールは何?

iPhoneアプリTwitterFacebook でURLを共有できるようにします。

ShareKit とは

詳しくは『ShareKit : Drop-in Share Features for all iOS Apps』をご覧ください。いくつか列挙します。

  • SNSに簡単に共有できる。共有を3行で書けちゃうのがうたい文句。実際とても短いコードで実現できました
  • サポートしているSNSの数が豊富。Twitter, Facebook, Delicious, Tumblr など。はたまたメール送信やクリップボードへのコピーなどもやってくれます
  • iOSに対応している。たとえば iOS 5Facebook の共有をするには自前の UI をつくらないといけないのですが、それをやってくれてたりで便利です

セットアップの方針

環境は XCode/Objective-C です。GitHubにあるドキュメントによると iOS 5.1 以降が必要です。左記のドキュメントでは submodule でインストールしていますが、今回はシンプルにインストールできる CocoaPods で行います。ARC の有効・無効は関係なく動きます。特別な設定は必要ありません。
ちなみに ShareKit のコミットに次のことが記載されています。

  • submodule として追加しなくても動作するようになった
  • ARC でも動作するようになった

ShareKit を CocoaPods でインストール

サンプルコードはこちらXCode に取り込んでふつうに動くと思います。

それでは、サンプルコードをつくるまでの手順を書きます。はじめにプロジェクトを新規作成してください。今回は objc-sharekit-spike とします。次に CocoaPods をインストールします。インストール方法はこちらをご参照ください。『XCode/Objective-C 開発:CocoaPods でライブラリをインストールする - bekkou68の日記

Podfile は次のように用意します。

platform :ios
pod 'ShareKit/Facebook'
pod 'ShareKit/Twitter'

ライブラリをインストール。

$ pod install

ShareKit 2.0 が入ることを確認したら、objc-sharekit-spike.xcworkspace を XCode で開き直します。

ボタンを押下したら各SNSにシェアできる ActionSheet を表示しましょう。本家のサンプルコードを多少崩して自前で ActionSheet をつくります。そのまま使うと他のSNSへの導線や最近シェアした順にSNSを並び替えてくれたりと高機能ですが、今回は必要ないので。
まずは xib に適当にボタンを配置して connect します。そのボタンから呼ぶアクションは shareToSNS とします。あとは次のように各ファイルを編集します。

objc-sharekit-spike/ViewController.m に ActionSheet の表示部分を書きます。

+ #import "SHKTwitter.h"
+ #import "SHKFacebook.h"

(snip)

+ -(void)actionSheet:(UIActionSheet*)actionSheet
+ clickedButtonAtIndex:(NSInteger)buttonIndex {
+     NSURL *url = [NSURL URLWithString:@"http://gogengo.me"];
+     SHKItem *item = [SHKItem URL:url title:@"Awesome ;) from ShareKit"];
+
+     switch (buttonIndex) {
+         case 0:
+             [SHKTwitter shareItem:item];
+
+             break;
+         case 1:
+             [SHKFacebook shareItem:item];
+
+             break;
+         case 2:
+             // キャンセルの場合
+
+             break;
+     }
+ }
+
+ - (IBAction)shareToSNS:(id)sender {
+     UIActionSheet *actionSheet = [[UIActionSheet alloc] init];
+
+     actionSheet.delegate = self;
+     actionSheet.title = @"共有するSNSを選んでください。";
+
+     [actionSheet addButtonWithTitle:@"Twitter"];
+     [actionSheet addButtonWithTitle:@"Facebook"];
+     [actionSheet addButtonWithTitle:@"キャンセル"];
+     actionSheet.cancelButtonIndex = 2;
+
+     [actionSheet showInView:self.view];
+ }

objc-sharekit-spike/ViewController.h

 @interface ViewController : UIViewController
+ <UIActionSheetDelegate> {
+ }
+
+ - (IBAction)shareToSNS:(id)sender;

objc-sharekit-spike/MySHKConfigurator.h を新規作成します。実装クラスに各SNSへの設定を書きます。

#import "SHKConfiguration.h"

@interface MySHKConfigurator : DefaultSHKConfigurator
@end

objc-sharekit-spike/AppDelegate.m において、アプリ起動時に設定を読み込むようにしましょう。

+ #import "MySHKConfigurator.h"

+ @implementation MySHKConfigurator
+ - (NSString*)facebookAppId {
+     return @"438294769566560"; // アプリケーションID。ちなみに https://developers.facebook.com/apps からつくれます
+ }
+ @end

  @implementation AppDelegate

  @synthesize window = _window;
  @synthesize viewController = _viewController;

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  {
+     DefaultSHKConfigurator *configurator = [[MySHKConfigurator alloc] init];
+     [SHKConfiguration sharedInstanceWithConfigurator:configurator];

Pods/Facebook-iOS-SDK/Facebook.m(参考:iphone - sharekit not working on facebook - Stack Overflow

  - (void)authorize:(NSArray *)permissions {
      self.permissions = permissions;

-     [self authorizeWithFBAppAuth:YES safariAuth:YES];
+     // 今回はURLをシェアできればいいので、OAuth認証する必要はない
+     [self authorizeWithFBAppAuth:NO safariAuth:NO];
  }

これで Run を実行してください。シミュレータと実機の両方でシェアできることを確認できました。

そのうち、いかにトライアンドエラーしたかについてのエントリも書くかもしれません。沢山のハマリポイントがあったので。。

ではでは。ShareKit で快適なシェアライフをお過ごしください ^ω^