はじめまして、ニノです。
SwiftでiOSアプリを作っていて、カスタムURLスキームでアプリ間連携を行う機会があったのでご紹介したいと思います。
カスタムURLスキームとは
iOSアプリでアプリ間連携を行う手段として、カスタムURLスキームを利用する方法があります。
アプリには固有のカスタムURLスキームを設定することができます。
例えば、sample://
のようなカスタムURLスキームを設定すると、このURLでアプリを外部から起動することができます。
カスタムURLスキームの設定方法
info.plistを開いて、以下のように「URL types」->「URL Schemes」の項目にカスタムURLスキームを設定します。
ここでは、sample://
というカスタムURLスキームを想定して設定します。
カスタムURLスキームの受信処理
これでアプリを外部から起動する準備ができました。
カスタムURLスキームを受信すると、AppDelegate.swift の以下の処理が呼ばれるためコードを追記しましょう。
なお、iOSのバージョンが9以降と8以前では呼ばれる関数が違うため注意が必要です。
両バージョンに対応する場合は、それぞれの定義が必要になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// カスタムURLスキーム受信 (iOS9?)
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
// 起動後の処理
return true
}
// カスタムURLスキーム受信 (~iOS8)
func application(app: UIApplication, handleOpenURL url: NSURL) -> Bool {
// 起動後の処理
return true
}
|
パラメータの受信
次は、カスタムURLスキームでパラメータを受信する方法です。
sampleアプリを呼び出す際に、「param1=AAA」「param2=BBB」という2つのパラメータを渡したい場合、次のようなURLでアプリを呼び出します。
sample://?param1=AAA¶m2=BBB
これらのパラメータを受信する処理は以下のようになります。
[AppDelegate.swift]
1
2
3
4
5
6
7
8
9
10
11
|
// カスタムURLスキーム受信 (iOS9?)
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
//パラメータの取得
let comp = NSURLComponents(URL: url, resolvingAgainstBaseURL: false)
let params = urlComponentsToDict(comp!)
let param1 = params["param1"]// AAA
let param2 = params["param2"]// BBB
return true
}
|
これで受信したパラメータに応じて、遷移する画面を切り替えたり処理を分岐することもできます。
以上、主に受信側のご紹介になりましたが、カスタムURLスキームを使ってアプリ間連携を行う方法でした。