狠狠撸

狠狠撸Share a Scribd company logo
Universal Links対応をした話
iOS 10時代のDeep Link技術
2017/5/24
potatotips #40 @ Retty株式会社
iOS/Android開発Tips共有会
行木 千春
自己紹介
行木 千春(なめき ちはる)
昔 macOS向けアプリ?ミドルウェア開発者 → 今 iOSアプリ開発者
株式会社サイバーエージェント
Amebaアプリ担当
アメブロの投稿?閲覧アプリです!
株式会社 nana music
音楽コラボレーションアプリ nana
音声エンジン製作者
音声処理技術が好きです
モチベーション
? Universal LinksはiOS 9以降の機能
? iOS 10が普及した今、サービスに導入しやすくなった
? 実際に対応して得られた知見(発表当時の情報からのアップデー
トなど)をまとめる
おさらい
~ ユーザ視点で見たUniversal Links ~
HTTPまたはHTTPSのリンクをタップした時に
ドメインに対応するアプリが起動する
Universal Links経由でアプリが開いた時のステータスバー
Safariで表示
(今後もSafariで開くようになる)遷移元アプリに戻る
Safariで表示時に下に引っ張ると
アプリで開くためのバーが出現
「開く」を選ぶと再びアプリで開くようになる
この手順により、アプリで開くかSafariで開くかはユーザが選択可能
(正直わかりにくい?)
アプリが起動する条件
? ユーザがSafariで開くことを選択していない
? iOS 9以降
? アプリがインストールされている
未インストールの場合、操作中のアプリでそのまま遷移
ストアが立ちあがったりはしない
? 同一ドメイン内の遷移ではない
厳密にはスキーマが異なる場合は起動した
e.g.) http://hoge.com/ から https://hoge.com/ への遷移
? 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 {}
? AASA (apple-app-site-association) ファイルを配置
? ルートまたは .well-known サブディレクトリ配下に置く
? HTTPSで直接アクセスできるようにする
HTTPではダメ, リダイレクトもNG
? アプリのインストール、またはアップデート時にOSに取得される
サーバエラー(500系)の場合、3時間後に再取得
おさらい
~ サーバ側の対応 ~
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と異なるので注意
←
AASAファイルの記述方法
? detailsもpathも先頭から評価される
? マッチしたらそこで評価を終了
? 複数のアプリが記述 & インストールされていたら、先に書かれて
いる方が立ち上がる
? Pathのマッチングルール
? クエリやフラグメントは対象にならない
? ? … 任意の1文字 (/もOK)
? * … 任意の文字列(0文字でも/が混ざっていても良い)
? NOT はiOS 9.2以降
? 最後のスラッシュの有無はマッチングに寄与しなかった
解釈はOSバージョンに依存するので注意してテストする
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のみに限定可
? 非同期になった
open()メソッドを呼ぶと
外部アプリで開く前に
確認ダイアログを出してくれるようになった
「アプリで開く」バー
? SafariのUI
? 表示はカスタマイズ不可
? 表示される条件
? 対応アプリをインストール済み
? 対応ドメインをSafariで開く設定にしている
? HTMLにはSmart App Bannerなどの記述は必要ない
推測:iOSが実際に何をしているか
? iOS端末上にドメイン - アプリのマッピング情報が存在
? アプリのインストール/アップデート時にマッピング情報を更新
? URLを開く際、URLのドメインに対応アプリが存在したらアプリ
で開く
ほぼ端末上の処理で成り立っている機能
iOS 9とiOS 10での挙動の違い
iOS 9
最初のリクエストがUniversal Linksのときのみアプリが起動する
iOS 10
リダイレクト先がUniversal Linksの場合もアプリが起動する
最初のリクエストとリダイレクト先がどちらもUniversal Linksだった場合、
application(application:continueUserActivity:restorationHandler:) が2回呼び出される
リダイレクト時の挙動が異なっていた
テスト方法(運用前)
? STGで技術検証
? 本番にAASAファイルを配置してテスト
STGのURLはGoogleなどにインデックスされていないため
ユーザ体験がどう変わるかの検証には本番を使う必要がある
? AASAファイルにはドメイン依存の情報がないため、STGと本番で
同じファイルを利用可能
? アプリの Associated Domains を環境によって書き換える
テスト方法(運用後)
ユーザ体験の検証のために本番のAASAファイルを更新?!
… するわけにはいかない
プロキシを利用するなどしてルーティングを工夫
?host
書き換え
proxy
本番
IP: xxxxxxx
社内からのみ見える
本番環境
運用上の課題
? 機能を切り戻したり、挙動を変更するには
アプリのアップデートが必要
AASAファイルを更新しても、アプリのアップデートのタイミングでしか取得しに来
てくれない
? アプリバージョンとAASAファイルの整合性の保ち方
? リファラなど流入元の情报が取得できないため、厂贰翱の観点で困る
ユーザの反応
? いきなりアプリが開くようになってうざい
? 元に戻したいという問い合わせが来た
→ 操作方法を案内
むやみにアプリが開くのはストレス
サービスの価値を本当に高められ
ユーザにも納得感のある場所で使わないといけない
Appendix: Custom URL Scheme is dead?
? URLが開けるかどうかを確認する canOpenURL() はiOS 9以降
info.plistにスキーマの記載が必要になった
? iOS 8以前は代わりに canOpenURL() の呼び出し回数が50回に制限されていた
? 実際にアプリを開く open() メソッドには制限がない
? open()メソッドが外部アプリで開く前に確認ダイアログを出してく
れるようになった
十分利用可能
カスタムスキーマ最大の問題点
アプリがインストールされていないと
Safariで「ページをひらけません」エラーが表示される
公開されているWeb面に使うのは厳しい
アプリ間遷移で利用する分には
open()メソッドでエラーハンドリングできるので良さそう
所感
便利そうだが制限が多く、使い所が難しい
ご静聴ありがとうございました
?
WWDC 2017に参加します
できたてのApple Parkに行ってみたい
告知: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
Ad

Recommended

顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
顿辞肠办别谤から肠辞苍迟补颈苍别谤诲への移行
Kohei Tokunaga
?
搁别诲颈蝉の特徴と活用方法について
搁别诲颈蝉の特徴と活用方法について
Yuji Otani
?
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
Masahito Zembutsu
?
骋谤补辫丑蚕尝の蝉耻产蝉肠谤颈辫迟颈辞苍て?出来ること
骋谤补辫丑蚕尝の蝉耻产蝉肠谤颈辫迟颈辞苍て?出来ること
Shingo Fukui
?
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
マルチクラウドでContinuous Deliveryを実現するSpinnakerについて
NTT Communications Technology Development
?
摆社内勉强会闭贰尝叠と础尝叠と数万スハ?イク负荷テスト
摆社内勉强会闭贰尝叠と础尝叠と数万スハ?イク负荷テスト
Takahiro Moteki
?
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
Trainocate Japan, Ltd.
?
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
Kentaro Ebisawa
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
?
インフラ颁滨颁顿の勘所
インフラ颁滨颁顿の勘所
Toru Makabe
?
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
?
App013 ここはあえて紙と
App013 ここはあえて紙と
Tech Summit 2016
?
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
?
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
Masaya Tahara
?
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
?
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
?
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
Amazon Web Services Japan
?
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
?
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
?
惭辞苍驳辞顿叠か?遅いときの切り分け方法
惭辞苍驳辞顿叠か?遅いときの切り分け方法
Tetsutaro Watanabe
?
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
itkr
?
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
?
AWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto Scaling
Amazon Web Services Japan
?
惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ
Yoshitaka Kawashima
?
碍耻产别贰诲驳别を触ってみた
碍耻产别贰诲驳别を触ってみた
Tomoyuki Tanigaki
?
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
?
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
?
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Yoshito Tabuchi
?
iOS bust #1
iOS bust #1
Ken Haneda
?

More Related Content

What's hot (20)

ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
?
インフラ颁滨颁顿の勘所
インフラ颁滨颁顿の勘所
Toru Makabe
?
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
?
App013 ここはあえて紙と
App013 ここはあえて紙と
Tech Summit 2016
?
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
?
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
Masaya Tahara
?
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
?
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
?
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
Amazon Web Services Japan
?
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
?
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
?
惭辞苍驳辞顿叠か?遅いときの切り分け方法
惭辞苍驳辞顿叠か?遅いときの切り分け方法
Tetsutaro Watanabe
?
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
itkr
?
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
?
AWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto Scaling
Amazon Web Services Japan
?
惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ
Yoshitaka Kawashima
?
碍耻产别贰诲驳别を触ってみた
碍耻产别贰诲驳别を触ってみた
Tomoyuki Tanigaki
?
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
?
AWS Black Belt Online Seminar Amazon Aurora
AWS Black Belt Online Seminar Amazon Aurora
Amazon Web Services Japan
?
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
?
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
Amazon Web Services Japan
?
インフラ颁滨颁顿の勘所
インフラ颁滨颁顿の勘所
Toru Makabe
?
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
?
App013 ここはあえて紙と
App013 ここはあえて紙と
Tech Summit 2016
?
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
Toru Makabe
?
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
なぜあなたのプロジェクトのDevSecOpsは形骸化するのか(CloudNative Security Conference 2022)
Masaya Tahara
?
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
?
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
?
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
?
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
?
惭辞苍驳辞顿叠か?遅いときの切り分け方法
惭辞苍驳辞顿叠か?遅いときの切り分け方法
Tetsutaro Watanabe
?
BigQuery で 150万円 使ったときの話
BigQuery で 150万円 使ったときの話
itkr
?
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
Amazon Web Services Japan
?
AWS Black Belt Online Seminar 2017 Auto Scaling
AWS Black Belt Online Seminar 2017 Auto Scaling
Amazon Web Services Japan
?
碍耻产别贰诲驳别を触ってみた
碍耻产别贰诲驳别を触ってみた
Tomoyuki Tanigaki
?
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
?

Similar to Universal Links対応をした話 (20)

C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Yoshito Tabuchi
?
iOS bust #1
iOS bust #1
Ken Haneda
?
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
Masami Yabushita
?
础苍诲谤辞颈诲以外辞蝉(翱辫别苍奥别产础辫辫について)
础苍诲谤辞颈诲以外辞蝉(翱辫别苍奥别产础辫辫について)
Wataru Asai
?
スマートフォンアプリ开発の倾向と叠补补厂の活用
スマートフォンアプリ开発の倾向と叠补补厂の活用
大介 秋本
?
今から始めよう!奥辞谤诲笔谤别蝉蝉で作る女子ウケ★スマホサイト
今から始めよう!奥辞谤诲笔谤别蝉蝉で作る女子ウケ★スマホサイト
rie05
?
Universal Link
Universal Link
toyship
?
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
LIFULL Co., Ltd.
?
Firefox OS 1.0 Application Development
Firefox OS 1.0 Application Development
dynamis
?
Office for iPad Office for iPhone 企業利用における問題点のまとめ
Office for iPad Office for iPhone 企業利用における問題点のまとめ
adachiyosuke
?
颈翱厂ローカライズことはじめ
颈翱厂ローカライズことはじめ
俊輔 嶺村
?
デベロッパー视点での3大スマホの违い
デベロッパー视点での3大スマホの违い
Makoto Kubota
?
はじめての颈翱厂アプリ开発 厂飞颈蹿迟対応版
はじめての颈翱厂アプリ开発 厂飞颈蹿迟対応版
Tomoki Hasegawa
?
20140320ニフティクラウド尘别别迟-耻辫!セミナー资料1
20140320ニフティクラウド尘别别迟-耻辫!セミナー资料1
NIFTY Cloud
?
オープンセミナー2013蔼広岛
オープンセミナー2013蔼広岛
Masahiko Tani
?
エンターフ?ライス?における颈翱厂アフ?リ开発て?押さえておくへ?き7つのこと
エンターフ?ライス?における颈翱厂アフ?リ开発て?押さえておくへ?き7つのこと
feedtailor
?
モバイル革命到来!世界でもっとも信用されているサービス
モバイル革命到来!世界でもっとも信用されているサービス
株式会社ドーモ
?
SpeechPlatform with Kinect
SpeechPlatform with Kinect
Yoshinori Hayashi
?
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Yoshito Tabuchi
?
できる!スマホアプリ:Webからはじまるアプリ for CMU16
できる!スマホアプリ:Webからはじまるアプリ for CMU16
Masami Yabushita
?
础苍诲谤辞颈诲以外辞蝉(翱辫别苍奥别产础辫辫について)
础苍诲谤辞颈诲以外辞蝉(翱辫别苍奥别产础辫辫について)
Wataru Asai
?
スマートフォンアプリ开発の倾向と叠补补厂の活用
スマートフォンアプリ开発の倾向と叠补补厂の活用
大介 秋本
?
今から始めよう!奥辞谤诲笔谤别蝉蝉で作る女子ウケ★スマホサイト
今から始めよう!奥辞谤诲笔谤别蝉蝉で作る女子ウケ★スマホサイト
rie05
?
Universal Link
Universal Link
toyship
?
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
20170510 タウンwi fixlifull_スマホアプリ開発の実例 (1)
LIFULL Co., Ltd.
?
Firefox OS 1.0 Application Development
Firefox OS 1.0 Application Development
dynamis
?
Office for iPad Office for iPhone 企業利用における問題点のまとめ
Office for iPad Office for iPhone 企業利用における問題点のまとめ
adachiyosuke
?
颈翱厂ローカライズことはじめ
颈翱厂ローカライズことはじめ
俊輔 嶺村
?
デベロッパー视点での3大スマホの违い
デベロッパー视点での3大スマホの违い
Makoto Kubota
?
はじめての颈翱厂アプリ开発 厂飞颈蹿迟対応版
はじめての颈翱厂アプリ开発 厂飞颈蹿迟対応版
Tomoki Hasegawa
?
20140320ニフティクラウド尘别别迟-耻辫!セミナー资料1
20140320ニフティクラウド尘别别迟-耻辫!セミナー资料1
NIFTY Cloud
?
オープンセミナー2013蔼広岛
オープンセミナー2013蔼広岛
Masahiko Tani
?
エンターフ?ライス?における颈翱厂アフ?リ开発て?押さえておくへ?き7つのこと
エンターフ?ライス?における颈翱厂アフ?リ开発て?押さえておくへ?き7つのこと
feedtailor
?
モバイル革命到来!世界でもっとも信用されているサービス
モバイル革命到来!世界でもっとも信用されているサービス
株式会社ドーモ
?
Ad

Universal Links対応をした話