3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

以前、組み込みWebブラウザの会社に勤めていた関係で、独自の機能の呼び出しにURLスキームを利用する方法はよ馴染みがある。iOSでも同様にCustom URL Schemeを利用してアプリケーションを呼び出すことができるが、この方法は、スキームが重複と、意図しない外部サービスから呼べるという問題がある。

そこで登場したのがUniversal Links。

ただ、Custom URL Schemeの知識は必要だと思うので、まずは説明する。

Custom URL Scheme

形式は、以下のとおり。

スキーム名://〜

スキーム名は、重複を避けるため、ドメイン名を逆から並べる、バンドルIDから派生した文字列がオススメされている。例えば、バンドルIDがcom.example.editorのアプリケーションの一覧画面を表示するスキーム名は、com.example.editor.listという感じにする。

Custom URL Schemeは、Info.plistに定義するが、Xcodeの画面から設定する方法もある。

まずは、Info.plistでの設定箇所を説明する。

  • URL typesの
    • Item nに
      • URL identifierにユニークな識別子を設定。バンドルIDから発生した文字列がオススメ。
      • URL Schemesに
        • Item nに、スキーム名を設定。複数設定可能。

Xcodeの画面から設定する場合は、TARGETS > Info > URL Types のIdentifierに識別子をURL Schemesにスキーム名を設定する。

iOS9以降では、安全性の観点からLSApplicationQueriesSchemesを設定するなどの対応が必要となる。

Universal Links

iOS9以降から利用可能。なので、それより前のバージョンをサポートする場合は、Custom URL Schemeの対応も必要。

対応手順は以下のとおり。

Webサーバのルートに、関連付けファイル (apple-app-site-association) を配置する。

{
	"applinks": {
		"apps": [],
		"details": {
			"チームID.com.example.アプリ名(バンドルID)": {
				"paths":[ "*" ]
			}
		}
	}
}

ファイル名は apple-app-site-association。

Content-Typeは application/json。

Appleの資料では、署名がある場合のContent-Typeは、application/pkcs7-mimeという説明があるが、Webサーバとの通信はHTTPSが推奨されているので署名されてなくても、なので、訳あってHTTPの場合の対応のようだ。

ちなみに、署名する場合は、以下の感じのコマンドとなる。

$ openssl smime \
    -sign \
    -nodetach \
    -in "unsigned.json" \
    -out "apple-app-site-association" \
    -outform DER \
    -inkey "private-key.pem" \
    -signer "certificate.pem"

アプリケーション側の設定は以下のとおり。

XcodeのTARGETS > Capabilities > Associated Domains をONにして、Domainsにサーバのドメイン名を設定する。

これで、App ConnectのAppIDsが、この内容で更新されるはずだが、されていなかったら手動で変更する。

Universal Linksには、Universal Linksの設定が正しいかどうかを確認するサイトが用意されている。

  • App Search API Validation Tool
    https://search.developer.apple.com/appsearch-validation-tool/

Universal Linksからの呼び出しは、UIApplicationDelegateの、以下のメソッドで検出できる。

optional func application(_ application: UIApplication, 
                 continue userActivity: NSUserActivity, 
       restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool

【関連情報】
Cocoa Advent Calendar 2018

Cocoa.swift 2019-01

Cocoa.swift

Cocoa勉強会 関東

Cocoa練習帳

Qiita

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?