先日,LINEで送る機能を実装したのが,UIActivityViewController を使用する際に iOS仕様で悩んだ点があったので,メモしておく.
従来よりアプリに「LINEで送る」機能を実装する場合,line://msg/ といった URLをオープンすることで LINE アプリを起動してメッセージを送信する手法を利用していたのだが,今回は UIActivityViewController を使用してみた.
まず,UIActivityViewController についてよく分からなかったのが,上段/下段がどのようなルールで分けられているのか?という点.
調べてみると iOS としては,Share (Share Extension) / Action (Activity) で分けたいようだ.
(サンプルとしてみた資料に上段,下段ともに Evernote の色つきアイコンと白黒アイコンが並んでいる様子をみて,最初意味が分からなかった.それぞれのアイコンでどこが違うの?)
これは,少し分かりづらい仕様だと思います.
(実際には,下段に表示される Activity でもプロパティー設定により,上段で表示することが可能.)
これらを把握しておけば,簡単に実装できます.
Acitivity を理解したければ,以下のライブラリのコードをざっとみれば確認できます.
以下,調べた事柄をメモしておきます.
▼ iOS アプリから「LINEで送る」には?
LINE 公式
https://media.line.me/ja/
▼ iOS「LINE で送信」を行えるライブラリ
LineActivity
https://github.com/OopsMouse/LINEActivity
LineKit
https://github.com/dlackty/LineKit
▼ UIActivityViewController を使用する方法
上記のライブラリを使用して,UIActivityViewController に LINE のアクティビティを表示するには,以下のようにする.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | NSArray *activities = @[[[LINEActivity alloc] init]]; UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText] applicationActivities:activities]; // 使用しないアクティビティタイプ NSArray *excludedActivityTypes = @[ UIActivityTypePostToWeibo, UIActivityTypeSaveToCameraRoll, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAirDrop, UIActivityTypeAssignToContact, UIActivityTypeAddToReadingList, UIActivityTypeMail, UIActivityTypeMessage ]; activityVC.excludedActivityTypes = excludedActivityTypes; [self presentViewController:activityVC animated:YES completion:NULL]; |
– iOS 7からUIAcitivityが上段と下段に分かれたデザインが採用されている.
+ (UIActivityCategory)activityCategory に以下の値を指定することで表示位置が指定できる.
上段: UIActivityCategoryShare
下段: UIActivityCategoryAction
▼ 注意点
– URLスキームがiOS9から使用方法が変更されている点
・iOS9から従来のopenURLメソッドを実行するだけでは,カスタムURLスキームが使用できなくなっている.
・カスタムURLスキームを使用するには,Info.plist に以下の設定を追加する.
custom_url_scheme は,「://」が必要ないことに注意.
1 2 3 4 | <key>LSApplicationQueriesSchemes</key> <array> <string>custom_url_scheme</string> </array> |