Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Hirayama (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/UniversalL inks.html#//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

🎉

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/UniversalL inks.html#//apple_ref/doc/uid/TP40016308CH12SW1 リストの順序は、システムが処理する際の順序になるよ 優先度とは一言も言っていなかった

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

Thanks.

Slide 27

Slide 27 text

ぜひ懇親会で弊社社員と デジタル名刺交換をしてみてください!