カスタムURLスキームを利用する (3)
iOSにおけるカスタムURLスキーム(以下、URLスキーム)について調べた事をまとめた連載記事の第3回目です。
今回は自作アプリにURLスキームを実装する方法について説明します。
この記事は Xcode 4.5.2 & iPhone 6.0 Simulator にて確認しています。
はじめに
アプリにURLスキームを登録するには Info.plist に情報を登録する必要があります。
直接プロパティリストを編集しても良いのですが、最近のXcodeでは簡単にURLスキームを登録できるようになっているので今回はGUI上で登録してみましょう。
URLスキーム登録の手順
- プロジェクトナビゲータでプロジェクトを選択する
- プロジェクトエディタから「TARGETS」内のターゲット選択 >「Info」をクリック
- URL Types を展開し、+ボタンを押して URL Type を追加する
- Identifier と URL Schemes 欄を埋める
Identifierは何に使われるのかいまいちよくわからないのですが、アップルのドキュメントによると、URLスキームの抽象名を含む文字列。一意性を確保するため、com.acme.myschemeのように、逆DNS形式の識別子を指定することをお勧めします。
ここで指定した文字列は、アプリケーションのInfoPlist.stringsファイル内のキーとしても使われます。このキーの値は、人が読める形式のスキーム名です。
「iOSアプリケーションプログラミングガイド」Apple Inc.とのことなのでユニークな文字列を指定しましょう。
Bundle identifier と同じものを指定しておけば良いと思います。
例) net.calmscape.${PRODUCT_NAME:rfc1034identifier}URL Schemes は登録したいスキーム名(httpやmailtoにあたる文字列)を指定します。
“Schemes” が示すように複数指定することもできます。その場合はカンマでスキームを区切って指定します。
以上がURLスキームの登録作業になります。
確認作業
ビルド&転送後、Safariのアドレス欄に 登録したスキーム名にコロンを付けたURL(例 testscheme://) を入力して開いてみましょう。アプリが起動すれば登録はOKです。
URLスキームがかぶったらどうなるのか?
iOSアプリケーションプログラミングガイド に以下の記述があります。
デベロッパのURLタイプにAppleが定義したものと同じスキームが含まれている場合は、デベロッパのアプリケーションではなく、Appleが提供するアプリケーションが起動されます。
1つ以上のサードパーティアプリケーションが同じURLスキームを処理するように登録されている場合、そのスキームにどのアプリケーションを渡すかを決定するプロセスは今のところ定義されていません。
ということで、
- アップルとかぶったらアップル優先
- アップル以外のアプリとかぶったときに何が起動されるかは未定義
となります。
(現状は後からインストールしたアプリが優先されるようですがそれを期待するのはやめましょう)
次回はURLスキーム経由でアプリが開かれた場合のURLリクエスト処理方法について書きたいと思います。
3 thoughts on “カスタムURLスキームを利用する (3)”