iOSアプリにはアプリ毎にカスタムURLスキームが設定でき、カスタムURLスキームを設定すると他のアプリからそのURLスキーム経由で、アプリを起動する事ができます。
単純に起動するだけではなくて、URLという用に自由にクエリなどを付けられるので、他のアプリから文字列を受け取って処理することもできます。
単独のアプリで特に他のアプリと連携するわけでもないという場合も多いですが、
そういう場合にもとりあえずカスタムURLスキームを設定しておくといい場合もあります。
他のアプリから、アプリを起動する事ができる
これは、自分がそういう用途で使ってなくてもユーザーがそういう使い方をしたい時などにカスタムURLスキームが無いけないため 、本当にとりあえずの意味でカスタムURLスキームが設定されていたほうが便利な気がします。
URLSchemeSupplier のようなユーザーがinfo.plistをわざわざ改変してまでカスタムURLスキームをつけていて欲しいという需要があることからも、とりあえず設定されていたほうがいいと思います。
アプリがインストールされているかの判定に利用できる
これは自社アプリ間の連携などに簡単に利用できる方法で、
NSString *url = [NSString stringWithFormat:@"%@://", [aScheme objectForKey:@"url_scheme"]];
BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]];
のようにcanOpenURLメソッドで、特定のカスタムURLスキームが開けるかという判定ができます。カスタムURLスキームは複数のアプリ間で重複で来てしまうので、アプリがインストールされているかを絶対的には判定できませんが、判定材料などに利用できます。
AアプリのカスタムスキームURLスキームが開ける ≒ Aアプリがインストールされている
前者はユーザーのため、後者は後から開発するアプリのためという感じですが、そういう利用方法をするためにカスタムURLスキームはとりあえずつけておいて損はないと思います。
カスタムURLスキームの設定方法
カスタムURLスキームはユニークであるべきで、そのユニークなURLスキームを考えるのが面倒だという場合、以下のようにしてidentifierと同じカスタムURLスキームを設定するのが楽で良い気がします。
Xcodeでアプリのプロジェクトを開いてアプリの識別子が設定されているかを確認します。
次に、Infoタブを開いて、Bundle identifierの値をコピーします。
ここでは jp.co.plusr.${PRODUCT_NAME:rfc1034identifier} という値です。
次にURL Type(カスタムURLスキーム)を追加します。
プロジェクト情報画面の右下にあるAdd からAdd URL Typeから追加します。
空のURL Typeが一つできるので、それのidentifierとURL SchemesをそれぞれさきほどコピーしたBundle identifierの値( jp.co.plusr.${PRODUCT_NAME:rfc1034identifier} )をペーストします。
これでプロジェクトを保存すれば、何もユニークな値を考えないでカスタムURLスキームを追加できます。
追加されたカスタムURLスキームはidentifierと同じ値となっているので、呼び出す時は
identifierの値://
e.g) jp.co.plusr.aboutAppView://
という感じで呼び出せるようになります。
identifierと同じカスタムURLスキーム は自動的に作られるべきな気がしますが、現状はそうなっていなので自分で設定する必要があります。
今後iOSアプリを作る場合はとりあえずのカスタムURLスキームでも設定しておくといいと思います。
おまけ
主に開発者が気をつけるべきことですが、iOS5から[[request URL] scheme]で取得できるカスタムURLスキームは小文字となるように変更されています。
なので、URLスキーム を判定するときは大文字小文字無視するなどして判定するようにしないとiOS4と動作が異なる場合も出てきてしまいます。
カスタムURLスキームいろいろ
- カスタムURLスキームは基本的に隠されたものではない(info.plist見ればわかるし)
- カスタムURLスキームが他のアプリとかぶると先にインストールしてた方のカスタムURLスキームが優先される(要確認?)
- iOSアプリはアプリ間でやり取りする方法が少ないので、カスタムURLスキームは有用だけど、認証とかそういう所で使ったりするほど安全ではない。
先程書いてたように、そのアプリのカスタムURLスキームだという保証はない。 - カスタムURLスキームはオープンなものという意識