【ios】Universal Linksを実装する - 実装方法
はじめに
前回書いた概要の続きです。
手順としては以下
Apple Developer
・「Identifiers」の「App IDs」より「Associated Domains」がEnabledになっていることを確認(または設定)
その際に、アプリの「ID」と「Prefix」もあとで使うのでメモしておく
※ここでは以下としておく
ID: jp.example.UniversalLinks
Prefix: AAAAAAAAAA
xcodeでの作業
・プロジェクトの「Capabilities」の「Associated Domains」を設定
・Universal Linksからアプリが起動されたときの処理を実装(urlスキームとにてる)
apple-app-site-associationを作ってSSL対応のwebサーバにアップロード
SafariからHandoffでiOSアプリを起動する
こちらのサイトでやりかたがのっていました(そのままです)
キーチェーンアクセスを開いて、「iPhone Developer: *****」を右クリック
→「iPhone Developer: *****」を書き出すで「個人情報交換(.p12)」形式で保存
→「dist.key」とする
ターミナル作業
> openssl pkcs12 -in dist.p12 -out dist.key -nocerts > openssl pkcs12 -in dist.p12 -out dist.pem -nodes -clcerts -nokeys > ls dist.key dist.p12 dist.pem
json.txt
{ "applinks": { "apps": [], "details": [ { "appID": "AAAAAAAAAA.jp.example.UniversalLinks", // 上でメモした「Prefix」と「ID」を.(ピリオド)でつなげたもの "paths": [ "*", // 全許可(ドメイン以下へアクセスされるとアプリが起動される) "/sample/*", // 特定のurlだけでアプリ起動する場合には、個別に指定 "/sample2/*", ] } ] } }
apple-app-site-association
> cat json.txt | openssl smime -sign -inkey dist.key -signer dist.pem -certfile dist.pem -noattr -nodetach -outform DER > apple-app-site-association
ここまでで「apple-app-site-association」が出来上がったのでコレをSSL対応のwebサーバーのドキュメントルートにアップロード
たとえば、「https://***.github.io/apple-app-site-association」でこのファイルにアクセス可能な状態となります。
アプリインストール(またはアップデート)時にアプリがこのファイルをダウンロードしにくるようです。
ちなみに、自己証明書(オレオレ証明書)のSSLだと上手く動きませんでした。
SSL対応してて自由に使えるサーバがなかったので、今回はGitHubの「GitHub Pages」を使いました。
xcodeでの作業
今回は「***.github.io」に「apple-app-site-association」を置いたので以下の2行を追加
applinks:*****.github.io webcredentials:*****.github.io
こんな感じになります
で、最後にAppDelegate.swifで起動されたときの挙動を実装します
AppDelegate.swift
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { ・・・ func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if let url = userActivity.webpageURL { // urlが取得できる } return true } ・・・ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { ・・・ // ユニバーサルリンクから起動 if let activityDic = launchOptions?[UIApplicationLaunchOptionsUserActivityDictionaryKey] as? NSDictionary { if let userActivity = activityDic.valueForKey("UIApplicationLaunchOptionsUserActivityKey") as? NSUserActivity { if let url = userActivity.webpageURL { // urlが取得できる } } } }
「***.entitlements」というファイルが出来ているので、これを選択して画面右の「Target Membership」の部分にチェックをつけてビルドします