iOS

application:openURL:sourceApplication:annotation

More than 1 year has passed since last update.

以下のメソッドはiOS9までのもので代わりにapplication:openURL:options:を使うことになる。

- (BOOL)application:(UIApplication *)application 
            openURL:(NSURL *)url 
  sourceApplication:(NSString *)sourceApplication 
         annotation:(id)annotation;

詳細

URLで指定されたリソースを開くかたずねられている。

このメソッドについての実装は特定のURLについて開き、それに従ってUIを更新する必要がある。

URLを開くためにアプリを起動する必要がある場合、
アプリはapplication:willFinishLaunchingWithOptions:とapplication:didFinishLaunchingWithOptions:をまず最初に読み出し、その後にこのメソッドを続けて呼び出す。

これらの2つのメソッドの返却を用いて、このopenURLのメソッドが呼ばれないようにすることができる。

(もし、アプリがすでに起動している場合は単にこのopenURLメソッドが呼ばれる。)

UIDocumentInteractionController

もし、URLがUIDocumentInteractionControllerによってopenURLされていたものなら、annotationにはsourceアプリがURLとともに送りたいデータが入っている可能性がある。このデータの形式は送信したアプリによって定義されるが、プロパティリストに入れることができるオブジェクトで構成していなければならない。

AirDropやUIDocumentInteractionControllerを通して送られたファイルはアプリのホームディレクトリのDocuments/Inbox directoryに入れられる。

アプリはこのディレクトのファイルを読んだり消したりする権限を持つが、書き込む権限を持たない。ファイルを修正したい場合はまず違うディレクトリに動かす必要がある。

くわえて、ディレクトリ内のファイルはデータプロテクションを用いてたいてい暗号化されている。もしファイルがプロテクトされていて、ユーザがこのメソッドが呼ばれる前にデバイスをロックをした場合、このファイルの内容は直ちに読むことができなくなる。その場合はこのメソッドでNOを返却するのではなく、URLを一度保存して、あとでファイルを開くことを試みるようにすべきである。

データのプロテクションが現在有効かどうかの判断には
アプリのprotectedDataAvailableプロパティからわかる。

Notification

このメソッドに対するnotificationは存在しない。

Parameters

application
自分のアプリ(シングルトン)

url
開かれるURL。ネットワークでもファルでも良い。Apple URL Scheme Reference参照。

sourceApplication
リクエストを送ったアプリのbundle ID。

annotation
アプリ間で情報を交換するために送信側から提供されるプロパティリスト。

Returns
URLが対応できるものならYES、対応できないURLならNO;