Slide 1

Slide 1 text

Hirayama (elu697) Universal Linksの挙動を知る

Slide 2

Slide 2 text

elu697 千葉県生まれ神奈川育ち 2016年からiOSアプリ開発 2022年からSansan株式会社でSansan-iOSアプリ開発 最近はCSIRTとしてプロダクトセキュリティ業務も開始 About 99年生まれ, 高専, CS, ネットワーク, セキュリティ, 旅行, バイク, 車, カメラ My keywords

Slide 3

Slide 3 text

こんな時どうするか

Slide 4

Slide 4 text

配信サービスを閲覧中 配信動画をタップしたら 動画視聴用アプリを起動 Web閲覧中に特定のコンテンツを アプリで開きたい

Slide 5

Slide 5 text

https://developer.apple.com/documentation/technotes/tn3155-debugging-universal- links#Test-universal-links-behavior ドメインが同じだと ページ内ナビゲーションとなる サブドメインを使えば回避できるよ

Slide 6

Slide 6 text

example.com/feed を閲覧中 app.example.com/video/123 を開く "TEAMID.com.example.app" 動画視聴用アプリを起動

Slide 7

Slide 7 text

複数のアプリになっても

Slide 8

Slide 8 text

配信サービスを閲覧中 配信動画をタップしたら 配信ボタンをタップしたら 配信用アプリを起動 動画視聴用アプリを起動 開くページによって 起動するアプリを分けたい

Slide 9

Slide 9 text

{ "applinks": { "apps": [], "details": [ { "appID": "TEAMID.com.example.app", "paths": [ "/video/*", ] } ] } } 動画視聴用アプリを起動 app.example.com のAASA 配信用アプリを起動 live.example.com の AASA { "applinks": { "apps": [], "details": [ { "appID": "TEAMID.com.example.live", "paths": [ "/stream/*", ] } ] } }

Slide 10

Slide 10 text

example.com/feed を閲覧中 app.example.com/video/123 を開く live.example.com/stream を開く "TEAMID.com.example.live" 配信用アプリを起動 "TEAMID.com.example.app" 動画視聴用アプリを起動

Slide 11

Slide 11 text

ではこう言う時は 実際の事例

Slide 12

Slide 12 text

Eightデジタル名刺ページを開く Eightを起動して デジタル名刺を開く Eightが入っていなかったら Sansanを起動して デジタル名刺を開く アプリに優先度をつけて起動したい

Slide 13

Slide 13 text

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.htm l#//apple_ref/doc/uid/TP40016308-CH12-SW1 リストの順序は、システムが処理する際の順序になるよ

Slide 14

Slide 14 text

{ "applinks": { "details": [ { "appIDs": [ "2325B398HM.net.8card.eight", # Eightアプリ "69JY2G46CE.com.sansan" # Sansanアプリ ], "components": [ { "/": "virtual_cards/*" } ] } ] } } AASA ※ appIDは誰でも見ることはできてしまうため、直接掲載しています

Slide 15

Slide 15 text

8card.net/virtual_cards/123 Eightデジタル名刺ページを開く “2325B398HM.net.8card.eight” Eightを起動して デジタル名刺を開く “69JY2G46CE.com.sansan” Eightが入っていなかったら Sansanを起動して デジタル名刺を開く

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

ではなかった

Slide 18

Slide 18 text

デジタル名刺の受け取り手段 ・URLのタップ ・QRコードのスキャン ・NFCカード(My Eight Card)のスキャン

Slide 19

Slide 19 text

デジタル名刺の受け取り手段 ・URLのタップ -> 期待通りの動作 ・QRコードのスキャン -> ・NFCカード(My Eight Card)のスキャン -> URLを開く手段によって挙動が異なる

Slide 20

Slide 20 text

URLを開く手段によって挙動が異なる 挙動: URLタップ 1. ・タップした場合、AASAの優先度順に基づいてアプリが起動する。 (※ ”2”の操作で記憶されている場合、その選択肢で開かれる) 2. ・ロングタップをした場合、UIMenuが表示されアプリまたはSafariで開くことがで きる。 ロングタップ操作によってSafariで開いたユーザーが、URLをタップしてもアプリ が開かないと事象に遭遇する可能性がある。

Slide 21

Slide 21 text

URLを開く手段によって挙動が異なる 挙動: QRコードスキャン 1. ・標準カメラの場合、黄色のリンクボタンを押すことでAASAの優先度に基づいたア プリが起動する。 (”2”の操作によって記憶されている場合はそちらが起動する) 2. ・標準カメラで右下QRボタンを押すと、UIMenuが表示されリンクを開く手段を選 択できる。 ・複数のアプリが存在する場合、開くアプリの選択肢が下側に表示され、選択した アプリは記憶される。 3. ・3rdパーティアプリの場合、実装方法にもよるが openURL() によって開かれると URLタップと同様の挙動となる。 ・URLロングタップによるユーザー操作が記憶されている場合、その選択が利用さ れる。

Slide 22

Slide 22 text

URLを開く手段によって挙動が異なる 挙動: NFCスキャン 1. ・読み込んだ際にバナーに開くアプリが表示される。 ・URLに関連するアプリがない場合: Safariで開かれる ・URLに関連するアプリが1つある場合: 関連アプリで開かれる 2. ・URLに関連するアプリが2つ以上ある場合: 選択ダイアログが表示さ れる。 ・AASAに記述される優先度が高いものが上の選択肢に表示される。

Slide 23

Slide 23 text

起動先度付けができていない

Slide 24

Slide 24 text

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.htm l#//apple_ref/doc/uid/TP40016308-CH12-SW1 リストの順序は、システムが処理する際の順序になるよ 優先度とは一言も言っていなかった

Slide 25

Slide 25 text

システムの挙動を理解して プロダクト開発をしていきましょう

Slide 26

Slide 26 text

Thanks.