「iOSアプリにソーシャルサイトでのシェア機能を3行で簡単実装できる」という謳い文句で有名な ShareKit を初めて使ってみたのですが、ひっかかった部分や、ドキュメントに書いてなくてソースから汲み取った部分などあったので、諸々メモしておきます。
ソース入手先に注意!
ググるとここがトップに出てきて、このページ内にリンクが張られているソースのダウンロード先はここということになっていますが、最終更新が1年以上前とえらく古いものなので要注意です。
現在の本家はこちらのようです。
https://github.com/ShareKit/ShareKit
ドキュメントはこちら。
https://github.com/ShareKit/ShareKit/wiki
iOS 5 から追加された Twitter フレームワークにも対応済み
作っているアプリのビルドターゲットが iOS 5.0 以上なので、Twitter は TWTweetComposeViewController を使い、Facebook は ShareKit を使うつもりでいたのですが、ShareKit ライブラリ内に SHKiOS5Twitter なるクラスを発見!ソースを見てみると内部で TWTweetComposeViewController を使用しているようです。
iOS5用の方を使う方法ですが、SHKTwitter クラスに次のような判定処理が入っており、
if ([self twitterFrameworkAvailable]) { [SHKiOS5Twitter shareItem:self.item]; [SHKTwitter logout];//to clean credentials - we will not need them anymore return; }
特に iOS5 用にコードを書かなくても Twitter フレームワークをプロジェクトに追加しておけば、自動的に Twitter フレームワークの方(SHKiOS5Twitter)を使ってくれます。
Twitter 画像投稿
ShareKit/Sharers/Services/ 配下に Facebook と Twitter だけを残し、下記のようなコードでアクションシートを呼び出したときに、
SHKItem *item = [SHKItem image:[UIImage imageNamed:@"hoge.png"] title:@"Title"]; SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item]; [actionSheet showInView:self.view];
デフォルトだと「Facebook」「コピー」「その他」がアクションシートの選択肢として出てきます。
ここに、「Twitter」という選択肢を登場させたい場合は、DefaultSHKConfigurator.m の defaultFavoriteImageSharers を下記のようにカスタマイズします。
- (NSArray*)defaultFavoriteImageSharers { // return [NSArray arrayWithObjects:@"SHKMail",@"SHKFacebook", @"SHKCopy",@"SHKVkontakte", nil]; return [NSArray arrayWithObjects:@"SHKFacebook", @"SHKTwitter", nil]; }
アクションシートの「その他」をなくす
英語では "more"、日本語では「その他」という選択肢が出てきますが、上と同様に DefaultSHKConfigurator.m の showActionSheetMoreButton をカスタマイズすることで消すことができます。
- (NSNumber*)showActionSheetMoreButton { // return [NSNumber numberWithBool:true]; return [NSNumber numberWithBool:false]; }
Facebookでの画像投稿時に編集画面を出す
結論から言って、画像つき投稿用の編集画面は用意されてなさそうです。UIフォルダ配下のクラスの定義を見ても、UIImageView をメンバに持っているクラスは見当たらなかったので・・・
間違っていたらすいません。
投稿前に確認を挟む
上記の通り画像付き投稿時には編集画面を経由できないっぽいので、一旦確認用アラートを出すことにしました。
アラートを出したいクラスで SHKShareItemDelegate への準拠を宣言し、shareDelegate を設定します。
SHKActionSheet *actionSheet = [SHKActionSheet actionSheetForItem:item];
actionSheet.shareDelegate = self;
aboutToShareItem:withSharer: デリゲートメソッドを実装します。
これは SHKActionSheet でいずれかの投稿先が選択されると呼ばれるメソッドで、戻り値に NO を返すと、ShareKit による投稿を止めることができます。
下記サンプルコードでは Facebook が選択されたときにすぐに投稿せず一旦確認アラートを出すようにしています。
- (BOOL)aboutToShareItem:(SHKItem*)item withSharer:(SHKSharer*)sharer { if ([sharer isKindOfClass:[SHKFacebook class]]) { self.pendingSharer = sharer; // 確認用アラートを出す return NO; } return YES; }