ShareKit を CocoaPods でインストールして Twitter と Facebook に共有する(XCode/Objective-C)
はじめに
ShareKit のセットアップにだいぶ苦労したのでこのエントリに書き刻んで記録します。ゴリゴリ。
ShareKit とは
詳しくは『ShareKit : Drop-in Share Features for all iOS Apps』をご覧ください。いくつか列挙します。
セットアップの方針
環境は 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 で快適なシェアライフをお過ごしください ^ω^