狠狠撸
Submit Search
Universal Links対応をした話
?
Download as PPTX, PDF
?
4 likes
?
9,214 views
C
Chiharu Nameki
Follow
2017/5/24 potatotips #40
Read less
Read more
1 of 26
Download now
More Related Content
Universal Links対応をした話
1.
Universal Links対応をした話 iOS 10時代のDeep
Link技術 2017/5/24 potatotips #40 @ Retty株式会社 iOS/Android開発Tips共有会 行木 千春
2.
自己紹介 行木 千春(なめき ちはる) 昔
macOS向けアプリ?ミドルウェア開発者 → 今 iOSアプリ開発者 株式会社サイバーエージェント Amebaアプリ担当 アメブロの投稿?閲覧アプリです! 株式会社 nana music 音楽コラボレーションアプリ nana 音声エンジン製作者 音声処理技術が好きです
3.
モチベーション ? Universal LinksはiOS
9以降の機能 ? iOS 10が普及した今、サービスに導入しやすくなった ? 実際に対応して得られた知見(発表当時の情報からのアップデー トなど)をまとめる
4.
おさらい ~ ユーザ視点で見たUniversal Links
~ HTTPまたはHTTPSのリンクをタップした時に ドメインに対応するアプリが起動する
5.
Universal Links経由でアプリが開いた時のステータスバー Safariで表示 (今後もSafariで開くようになる)遷移元アプリに戻る
6.
Safariで表示時に下に引っ張ると アプリで開くためのバーが出現 「開く」を選ぶと再びアプリで開くようになる この手順により、アプリで開くかSafariで開くかはユーザが選択可能 (正直わかりにくい?)
7.
アプリが起動する条件 ? ユーザがSafariで開くことを選択していない ? iOS
9以降 ? アプリがインストールされている 未インストールの場合、操作中のアプリでそのまま遷移 ストアが立ちあがったりはしない ? 同一ドメイン内の遷移ではない 厳密にはスキーマが異なる場合は起動した e.g.) http://hoge.com/ から https://hoge.com/ への遷移
8.
? Entitlement の
Associated Domainsにapplinks:をつけてドメインを記載 e.g. applinks:example.com ? Universal Links経由でアプリが開かれた時に呼ばれるメソッドを実装 ? 扱えないURLはopen(_:options:completionHandler:)で開き直す アプリが立ちあがった後、さらに別アプリが起動するのでUX上いまいち。 なるべく発生しないようにしたい。 おさらい ~ アプリ側の対応 ~ func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {}
9.
? AASA (apple-app-site-association)
ファイルを配置 ? ルートまたは .well-known サブディレクトリ配下に置く ? HTTPSで直接アクセスできるようにする HTTPではダメ, リダイレクトもNG ? アプリのインストール、またはアップデート時にOSに取得される サーバエラー(500系)の場合、3時間後に再取得 おさらい ~ サーバ側の対応 ~
10.
AASA (apple-app-site-association) ファイル { "applinks":
{ "apps": [], "details": [ { "appID": "XXXXXXXXXX.jp.co.hoge.AppName", "paths": [ "NOT /_*", "*" ] }, { "appID": "YYYYYYYYYY.jp.co.choge.AppName-ota", "paths": [ "NOT /_*", "*" ] } ] } } AppIDのPrefixを指定 昔ながらのアプリでは チームIDと異なるので注意 ←
11.
AASAファイルの記述方法 ? detailsもpathも先頭から評価される ? マッチしたらそこで評価を終了 ?
複数のアプリが記述 & インストールされていたら、先に書かれて いる方が立ち上がる ? Pathのマッチングルール ? クエリやフラグメントは対象にならない ? ? … 任意の1文字 (/もOK) ? * … 任意の文字列(0文字でも/が混ざっていても良い) ? NOT はiOS 9.2以降 ? 最後のスラッシュの有無はマッチングに寄与しなかった 解釈はOSバージョンに依存するので注意してテストする
12.
func open(_ url:
URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Void)? = nil) アプリ内からURLをUniversal Linksとして開くには UIApplication の open() メソッドを使う ? 外部アプリで開けたかどうかの結果が取得できる ? 自分自身の対応ドメインのURLを渡すとSafariが起動する iOS 10以降 iOS 9以前の open(_ : URL) -> Bool と比較すると ? 開けるURLのタイプをUniversal Linksのみに限定可 ? 非同期になった
13.
open()メソッドを呼ぶと 外部アプリで開く前に 確認ダイアログを出してくれるようになった
14.
「アプリで開く」バー ? SafariのUI ? 表示はカスタマイズ不可 ?
表示される条件 ? 対応アプリをインストール済み ? 対応ドメインをSafariで開く設定にしている ? HTMLにはSmart App Bannerなどの記述は必要ない
15.
推測:iOSが実際に何をしているか ? iOS端末上にドメイン -
アプリのマッピング情報が存在 ? アプリのインストール/アップデート時にマッピング情報を更新 ? URLを開く際、URLのドメインに対応アプリが存在したらアプリ で開く ほぼ端末上の処理で成り立っている機能
16.
iOS 9とiOS 10での挙動の違い iOS
9 最初のリクエストがUniversal Linksのときのみアプリが起動する iOS 10 リダイレクト先がUniversal Linksの場合もアプリが起動する 最初のリクエストとリダイレクト先がどちらもUniversal Linksだった場合、 application(application:continueUserActivity:restorationHandler:) が2回呼び出される リダイレクト時の挙動が異なっていた
17.
テスト方法(運用前) ? STGで技術検証 ? 本番にAASAファイルを配置してテスト STGのURLはGoogleなどにインデックスされていないため ユーザ体験がどう変わるかの検証には本番を使う必要がある ?
AASAファイルにはドメイン依存の情報がないため、STGと本番で 同じファイルを利用可能 ? アプリの Associated Domains を環境によって書き換える
18.
テスト方法(運用後) ユーザ体験の検証のために本番のAASAファイルを更新?! … するわけにはいかない プロキシを利用するなどしてルーティングを工夫 ?host 書き換え proxy 本番 IP: xxxxxxx 社内からのみ見える 本番環境
19.
運用上の課題 ? 機能を切り戻したり、挙動を変更するには アプリのアップデートが必要 AASAファイルを更新しても、アプリのアップデートのタイミングでしか取得しに来 てくれない ? アプリバージョンとAASAファイルの整合性の保ち方 ?
リファラなど流入元の情报が取得できないため、厂贰翱の観点で困る
20.
ユーザの反応 ? いきなりアプリが開くようになってうざい ? 元に戻したいという問い合わせが来た →
操作方法を案内 むやみにアプリが開くのはストレス サービスの価値を本当に高められ ユーザにも納得感のある場所で使わないといけない
21.
Appendix: Custom URL
Scheme is dead? ? URLが開けるかどうかを確認する canOpenURL() はiOS 9以降 info.plistにスキーマの記載が必要になった ? iOS 8以前は代わりに canOpenURL() の呼び出し回数が50回に制限されていた ? 実際にアプリを開く open() メソッドには制限がない ? open()メソッドが外部アプリで開く前に確認ダイアログを出してく れるようになった 十分利用可能
22.
カスタムスキーマ最大の問題点 アプリがインストールされていないと Safariで「ページをひらけません」エラーが表示される 公開されているWeb面に使うのは厳しい アプリ間遷移で利用する分には open()メソッドでエラーハンドリングできるので良さそう
23.
所感 便利そうだが制限が多く、使い所が難しい
24.
ご静聴ありがとうございました ?
25.
WWDC 2017に参加します できたてのApple Parkに行ってみたい
26.
告知:CyberAgentで前後にイベントを開催します WWDC直前 Pre-WWDC Gathering https://cyberagent.connpass.com/event/55235/ 5/30 19:30~ 渋谷プライムプラザ4F
Creative Lounge WWDC後 CA.swift #3 WWDC 2017 Reporting 6/19
Download