先日,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]; |
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> |
<key>LSApplicationQueriesSchemes</key>
<array>
<string>custom_url_scheme</string>
</array>