Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2012-11-27

たった1行でWebサービスと連携!UIActivity のまとめリポジトリをつくりました

UIActivityとは?

地味だからかあまり話題になってない気がするのですが、iOS 6 の便利な新機能の1つに UIActivity というのがあります。これは、


f:id:shu223:20120923052239p:image:w240


こんな感じでメールとか写真アプリとかFacebook/Twitterとかに写真やテキストを渡すためのUIです。(超ざっくり)


実装も超簡単!

投稿も写真アルバムへの保存もこれ一つでOKかつ実装も超簡単なので、もうTwitter.frameworkとか、Social.frameworkとか、MessageUI.frameworkとかは使わなくなってしまいました(※UIActivityViewControllerが内部的には使ってると思います)


UIActivity (UIActivityViewController) の実装コードはこんな感じです。

- (IBAction)pressBtn {

    NSString *text  = @"投稿するテキスト";
    NSURL    *url   = [NSURL URLWithString:@"http://投稿するURL.com"];    
    NSArray *activityItems = @[text, url];

    UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                                                               applicationActivities:@[]];    
    [self presentViewController:activityView animated:YES completion:nil];
}

「Twitter投稿の実装が簡単になった!」と iOS5 時代に大歓迎された TWTweetComposeViewController とそんなに実装量が変わらないですよね?


そんなわけで、僕はここ最近はほぼ確実に UIActivity を入れています。(OSのバージョン判定して、iOS6以上ならUIActivity、iOS5.XならTwitter.frameworkという実装をスニペットから貼り付けるだけなのでだいたい5分ぐらい)


カスタムUIActivityで、簡単に機能追加!

そんな便利な UIActivity ですが、さらに便利なことに、カスタムUIActivityをつくって UIActivityViewController に追加することができるのです。


どういうことかというと、たとえば、ARChromeActivity というライブラリを使うと、UIActivityViewController に Chromeアプリで URL を開くためのアイコンが追加されます。


f:id:shu223:20121127204445p:image:w200


で、このカスタムUIActivityの追加がまたラクなのです。

たとえば ARChromeActivity を追加したい場合に、上述したコードに追加するコードは1行だけ

ARChromeActivity *chromeActivity = [[ARChromeActivity alloc] init];

これを、UIActivityController を初期化する際の applicationActivities 引数に渡してやると、

UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                                                           applicationActivities:@[chromeActivity]];    

これだけの変更で Chrome アプリとの連携機能が実現するという優れものです。


カスタムUIActivityのまとめリポジトリ:UIActivityCollection

ずいぶん前置きが長くなってしまいましたが、そんなカスタムUIActivity を集めたリポジトリをつくりました。


https://github.com/shu223/UIActivityCollection


実装の参考用に、デモアプリも入っています。


f:id:shu223:20121212122550p:image:w200


ダウンロード方法

リポジトリはサブモジュールの形で入っているので、下記のように git で clone した後に submodule コマンドを実行してください。

$ git clone git://github.com/shu223/UIActivityCollection.git
$ cd UIActivityCollection/
$ git submodule update --init --recursive

本家リポジトリからファイル一式がダウンロードされます。


対応サービス/アプリ一覧

11/27現在でリポジトリに入っているサービス/アプリはこちら。

  • Buffer
  • Dropbox
  • Flattr
  • Instagram
  • Instapaper
  • Pinboard
  • Pinbook
  • Pocket
  • Readability
  • SoundCloud
  • Tumbletail

Githubで検索して集めただけなのですが、まだまだ意外と少ないなぁという印象です。

#この程度の数だと、カスタム UIActivity をオープンソースで配布することで、世界の誰かが見つけてくれてアプリに組み込んでくれたりしそうなので、カスタム UIActivity を配布すること自体がサービス/アプリのプロモーションに繋がるかも。


(2012/12/4追記)以下の2つの UIActivity を追加しました。


(2012/12/6追記)以下の2つの UIActivity を追加しました。

  • LINE
  • KakaoTalk

(2012/12/12追記)以下の2つの UIActivity を追加しました。

  • AppStore
  • In-App(アプリ内でUIWebViewに表示)

また、デモアプリの対応UIActivityを増やしました。


(2012/12/19追記)以下の2つの UIActivity を追加しました。

  • Google Maps
  • Nakamap

まとめ

思いのほか長くなってしまいましたが、カスタム UIActivity のまとめリポジトリ『UIActivityCollection』のご紹介でした!



naotokuinaotokui 2013/03/17 13:31 僕のサイトにいただいたコメントについですが、UIActivityだと、ポストを自動化できないですよね??

shu223shu223 2013/03/18 06:03 コメントさせていただきました!確かに、連携がURL Schemeベースだと自動化はできないですね。。

tonotono 2013/07/10 06:45 ユーザーがイベント情報を編集してからカレンダーに追加できるUIActivityを作成したのですが, もしよろしければUIActivityCollectionに追加していただけないでしょうか?

shu223shu223 2013/07/11 03:46 ご連絡ありがとうございます、ぜひ追加させていただきます!

tonotono 2013/07/11 05:51 早速のご返信ありがとうございます. よろしくお願いします!

shu223shu223 2013/07/16 02:52 追加させていただきました!

浜お浜お 2013/10/26 15:46 素敵なライブラリありがとうございます。
gitからダウンロードしたんですが、ビルドエラーが出ます。
おそらくgitのダウンロードファイルの中にBufferUIActivity.hとBufferUIActivity.mが入っておりません。
ご確認いただけますでしょうか?

shu223shu223 2013/10/26 16:19 ご連絡ありがとうございます。本家のBuffer SDKにUIActvitityの機能がついたことで、該当リポジトリのmasterブランチからはソースを撤去したようですね。
UIActivityCollectionのサンプルからBufferUIActvityへの参照を外しました。
こちらで解決しましたでしょうか?

はまおはまお 2013/10/31 11:49 ありがとうございます。
稼働しました!!
対応ありがとうございました。

kei0024kei0024 2014/01/09 15:11 大変便利で大助かりです!!

しかし、readabilityのリポジトリにバグがあって上手くできませんでした。

↓のフォークされたリポジトリのソースを使うと上手く出来ました。
https://github.com/adobkin/ReadabilityActivity

kenken 2014/03/30 20:28 大変便利で助かっています。

ios7だとLineでエラーになりました。。
generalPasteboardを使ってやったらうまく行ったので共有です。
#Lineのページ見るとios7は画像送信未サポートみたいですね。。
#http://media.line.me/howto/ja/

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setData:UIImagePNGRepresentation(item) forPasteboardType:@"public.png"];
LINEURLString = [NSString stringWithFormat:@"line://msg/image/%@", pasteboard.name];

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 |