universal link

32
Universal Link 2016/04/20 @TachibanaKaoru

Upload: toyship

Post on 16-Apr-2017

305 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Universal Link

Universal Link2016/04/20@TachibanaKaoru

Page 2: Universal Link

自己紹介渋谷のVOYAGE GROUPでiOSエンジニアをしています。Twitter/Vainglory : @TachibanaKaoruBlog : http://www.toyship.org/Bouldering : 4級朝時間.jpというアプリをだしてます。

Page 3: Universal Link

Universal Linkとはfrom iOS9

» 自分のアプリや他のアプリを起動するスキーム。

» iOS内部の(設定した)URL Linkからアプリを起動することができる。

» 今までのカスタムURLスキームをおきかえる機能。

» URL Schemeの場合にはそれぞれのアプリが好きなものを設定できるので、アプリ間の重複の危険性があったが、Universal Linkの場合には、Domain名に依存するため、一意性が担保できる。

Page 4: Universal Link

Universal Link

from Memo

Page 5: Universal Link

Universal Link

from Mail

Page 6: Universal Link

Universal Link

アプリがインストールされている場合、アプリで開く。

Page 7: Universal Link

Universal Link

アプリがインストールされていない場合、Mobile Safariで開く。

Page 8: Universal Link

他のアプリからの Universal Link» openURLで起動した場合には、Universal Linkが有効になります。

» ただし、urlを開く際にSFSafariViewController、WKWebView、UIWebViewを使うとUniversal Linkは無効になります。

» 意識の高いアプリはだめ。

Page 9: Universal Link

自分のアプリからの Universal Link自分のアプリからはopenURLをしてもUniversal Linkが有効になりません。(Mobile Safariで開く)

Page 10: Universal Link

Mobile Safariから» Mobile Safariのアドレスバーに直接URLを入力した場合や、Mobile

Safari内のリンクから移動した場合にはUniversal Linkはききません。

» Googleなどの検索結果からはUniversal Linkが有効になります。

Page 11: Universal Link

ユーザーの選択を保存» アプリで開くか、Mobile Safariで開くか選択できる機能がある。

Page 12: Universal Link

ユーザーの選択を保存Mobile SafariでUniversal Link対応のリンクを検索結果に表示してみる。

Page 13: Universal Link

ユーザーの選択を保存一旦はUniversal Linkとしてアプリで開かれるが、右上にSafariへのリンクを表示する。

Page 14: Universal Link

ユーザーの選択を保存Safariへのリンクを選択するとSafariで開き、以後はSafariで開くようになる。

Page 15: Universal Link

Smart App Bannerとの違い» Universal Linkは、Smart App Bannerとは目的が異なるため、両方実装する必要があります。

» Smart App Bannerでは、アプリがインストールされていたらアプリが起動され、アプリがインストールされていなかったらApp Storeが起動する。

<meta name="apple-itunes-app" content="app-id=400435286, app-argument=https://asajikan.jp/topics/">

Page 16: Universal Link

Smart App BannerとUniversal Linkの隠れた関係» Smart App Bannerのcontentのapp-argument指定がUniversal

Linkに対応しているかどうかでUIが変わる。(下記のリンクをMobile Safariでチェックしてみてください)

» https://asajikan.jp/ (Universal Link対応)

» https://asajikan.jp/topics/ (Universal Link非対応)

Page 17: Universal Link

Smart App Banner

Universal Link対応の場合、アプリでUniversal Linkとして開く。(Banner小さめ)

Page 18: Universal Link

Smart App Banner

Universal Link対応の場合、アプリのトップを開く。(Banner大きめ)

Page 19: Universal Link

実装方法» Server

» Client

Page 20: Universal Link

実装方法 (Server)» server root(/)に apple-app-site-association という名称でjsonフォーマットの設定ファイルを置く。

» (このファイルに署名をかける必要があるという情報があったけど、かける必要はありません。)

» iOS9.3.1以上では、apple-app-site-associationのファイルサイズは128KBに制限されてます。(9.3で発生していたクラッシュの原因だったらしい)

Page 21: Universal Link

apple-app-site-association format

» Bundle IdentifierとUniversal Linkに対応させたいpathを記述。{ "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] }}

Page 22: Universal Link

実装方法 (Server)» 設定ファイルの置き場所は、9.3から /.well-known/ もサポートするようになりました。

» Technical Q&A QA1919

» Incoming requests for /.well-known/apple-app-site-association filehttps://developer.apple.com/library/ios/qa/qa1919/index.html#//appleref/doc/uid/DTS40016874

Page 23: Universal Link

apple-app-site-association formatasajikan.jpの現在の設定{ "applinks": { "apps": [], "details": [ { "appID": "94VJUJ8B7P.jp.asajikan.www", "paths": [ "/", "/article/*", "/recipe/*" ] } ] }}

Page 24: Universal Link

apple-app-site-association format

» 実は、今のフォーマット以前に使われていた古いフォーマットもあります。(そのうち無効になると思うので使わないほうがよい)

{ "applinks": { "apps": [], "details": { "94VJUJ8B7P.jp.asajikan.www": { "paths": [ "/", "/article/*", "/recipe/*" ] } } }}

Page 25: Universal Link

apple-app-site-association format

» ?が一文字、*が複数文字

» NOTを使って対象外pathの設定もできるが、古いiOSでは非対応(9.2.1ではOK、9.1ではNG)

» "paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/", "/videos/wwdc/201?/"]

» こうすると、wwdc/201*/以下のファイルはwwdc/2010をのぞいてUniversal Link対応となる。

Page 26: Universal Link

App Search API Validation Tool

» formatのvalidation checkをすることができます。

» https://search.developer.apple.com/appsearch-validation-tool

Page 27: Universal Link
Page 28: Universal Link

実装方法 (Client)» ProjectのCapabilityにAssociated Domainsを設定

» 例)Domains: applinks:asajikan.jp

Page 29: Universal Link
Page 30: Universal Link

実装方法 (Client)» 起動された時のハンドリング処理

» UIApplicationDelegate

» application:continueUserActivity:restorationHandler:

» (Core SearchやHandoffによる起動ハンドリングする)

Page 31: Universal Link

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool{ if userActivity.activityType == "com.apple.corespotlightitem" { // Core Searchの処理を記述 } else if userActivity.activityType == NSUserActivityTypeBrowsingWeb {

let url : NSURL? = userActivity.webpageURL // Universal Linkの処理を記述

} return true }

Page 32: Universal Link

まとめ» Web Site連携アプリはUniversal Link導入すべき

» Smart App Bannerも連携させるとベター

» Universal Link対応pathは細かく設定できるが、iOSのバージョンによって動作が異なることに注意