その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

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

UIActivityとは?

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



こんな感じでメールとか写真アプリとか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 を開くためのアイコンが追加されます。



で、このカスタム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


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


ダウンロード方法

リポジトリはサブモジュールの形で入っているので、下記のように 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 を追加しました。

  • Calendar
  • Safari


(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』のご紹介でした!