Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deep Linksをはじめよう

ymnder
March 16, 2023

Deep Linksをはじめよう

ymnder

March 16, 2023
Tweet

More Decks by ymnder

Other Decks in Programming

Transcript

  1. CA.aab #2 - 2023/03/16
    Ryo Yamazaki
    Deep Linksをはじめよう

    View full-size slide

  2. ● Ryo Yamazaki
    ○ Twitter: @ymnd
    ○ GitHub: @ymnder
    ● Application Engineer
    ○ Android 日経電子版アプリ
    ○ Android 紙面ビューアーアプリ
    ● DroidKaigi co-organizer
    whoami

    View full-size slide

  3. ● 本発表ではDeep Linksはどのようなものか、どう実装・検証するのかを
    紹介します
    ● 特にDeep LinksのうちAndroid App Linksを扱います
    ※時間の関係で、Firebase Dynamic Linksなどは割愛します
    本発表のスコープ

    View full-size slide

  4. ● ユーザーをアプリ内の特定のコンテンツに直接誘導する機能
    Deep Linksとは

    View full-size slide

  5. ● Deep links
    ○ 任意のスキームのURIで実装できる
    ○ HTTPではじまる必要はない
    ● Web links
    ○ HTTPとHTTPSスキームを使う
    ○ 複数開ける場合はダイアログで選択する
    ● App Links(今回扱うもの)
    ○ autoVerify 属性を含むWeb links
    ○ Android 6.0 (API level 23) 以降で利用できる
    ○ リンクとアプリが結びつくのでダイアログが出ない
    ○ 補足: iOSではUniversal Linksが相当する
    Deep LinksとApp Links
    図はhttps://developer.android.com/training/app-linksから引用

    View full-size slide

  6. App Linksの動作

    View full-size slide

  7. アプリ
    未インストール
    アプリ
    インストール済

    View full-size slide

  8. Universal Linksの動作(比較)

    View full-size slide

  9. アプリ
    未インストール
    アプリ
    インストール済

    View full-size slide

  10. ● Webとアプリを安全に紐付けられる
    ○ 他のサイトに紐づくことがない
    ● Webからアプリへシームレスに移動できる
    ○ アプリでログインしているときにWebのログインが不要
    ○ => Webへの訪問がアプリに移るだけでなく、訪問回数などの向上が
    期待できる
    ● 他のアプリやGoogle検索から直接アプリを開ける
    ○ 普段使い慣れているアプリを使える
    App Linksを導入すると何が嬉しいか

    View full-size slide

  11. ● App Links / Universal Linksはインストール訴求をする仕組みではな
    いため別の手段を検討する
    ○ iOSの場合
    ■ Smart App Banners
    ○ iOS / Android共通
    ■ Firebase Dynamic Links
    アプリのインストールを訴求したい

    View full-size slide

  12. App Linksを実装する

    View full-size slide

  13. ● Tools > App Links Assistant
    ● 実装・検証のフローが整っている
    Android StudioのAssistantを使う

    View full-size slide

  14. ● 開きたいActivityに対してintent-filterを指定する
    ● 補足: iOSではEntitlementsにdomainを追加し、AppDelegateのapplication(_:continue:restorationHandler:)で
    handleする
    AndroidManifestにintent-filterを追加








    View full-size slide

  15. ● adbコマンドでIntentを発行する
    intent-filterの挙動の検証
    adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "http://domain.name:optional_port"

    View full-size slide

  16. ● アプリとWebの所有権を証明するため次のJSONファイルを指定された場所に置く
    ○ https://domain.name/.well-known/assetlinks.json
    ● アプリ IDとアプリの署名証明書の SHA256 フィンガープリントが必要
    ● 補足:iOSではapple-app-site-associationを作成する
    Digital Asset Links fileをサイトに置く
    [{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "sha256_cert_fingerprints": ["hogehoge"]
    }
    }]

    View full-size slide

  17. ● 専用のAPIで検証できる
    ○ https://digitalassetlinks.googleapis.com/v1/statements:list
    ?source.web.site=https://domain.name:optional_port&rel
    ation=delegate_permission/common.handle_all_urls
    Digital Asset Links fileの検証

    View full-size slide

  18. App Linksの動作検証

    View full-size slide

  19. ● 今までのステップで、Digital Asset LinksやIntentの動作確認はできて
    いた
    ● Webとアプリの連携ができていることを確認していく
    ● すなわち、Webサイトの所有確認を行い、Webリンクをタップしたときにア
    プリが開かれることを確認する
    ● 今回はngrokの利用ができる環境の例で説明する
    App Linksの動作検証

    View full-size slide

  20. ngrokについて
    ● ローカルのサーバーに外部からアクセスできるようにするサービス
    ○ 手元で触ってさくっと直して検証できる
    ● Caution
    ○ ngrokは無料プランではURLがpublicで誰でもアクセスできるようになるためセキュリ
    ティ上のリスクがある
    ○ privateにアクセスできる環境にURLを貼って検証するなど誤ってURLを公開しないよう
    に注意する
    ○ カスタムドメインやIP制限などセキュアに扱うために有料アカウントも検討する

    View full-size slide

  21. ● 例
    ○ python3 -m http.server # ローカルサーバーを立てる
    ○ ngrok http 8000 # HTTP tunnelを開始する
    ○ # https://example.jp.ngrok.io -> http://localhost:8000
    ○ # ↑セキュリティのためカスタムドメインの利用を検討する
    ngrokを利用できる環境での例

    View full-size slide

  22. App Linksからのアクセスを
    計測したい

    View full-size slide

  23. ● Intent.getParcelableExtra(Intent.EXTRA_REFERRER)
    ○ WebはChromeが自動でセットしてくれる
    ○ アプリはURLがはられたサービスの実装次第
    ● 例
    ○ Twitter App: https://t.co/xxxxxxxx
    ○ Google 検索: https://www.google.com
    ○ LINE: android-app://jp.naver.line.android
    計測リファラ: Android

    View full-size slide

  24. ● NSUserActivity.referrerURL
    ○ WebはSafariが自動でセットしてくれる
    ○ アプリのリファラは取得できない
    ○ 取得できるのはdomain部分
    ● 例
    ○ Twitter Web: https://t.co/
    ○ Google 検索 Web: https://www.google.co.jp/
    計測リファラ: iOS(比較)

    View full-size slide

  25. ● アプリとWebの連携は比較的簡単にできる
    ○ 動作の検証がしやすい
    ● Webでできたことの洗い出しが大事となる
    ○ アプリで実装されていない可能性がある
    ● iOS / Androidで微妙に動作が異なる
    ○ それぞれの挙動を手元で検証すること
    ● App->Webへの遷移で計測のリファラがないことがある
    まとめ

    View full-size slide

  26. ● App Linksの実装方法
    ○ https://developer.android.com/training/app-links
    ● Universal Linksの実装方法
    ○ https://developer.apple.com/ios/universal-links/
    ● Deep Linksの全体像やApp Linksの挙動
    ○ https://techlife.cookpad.com/entry/2022/05/31/100000
    ● iOS 14でUniversal Linksを検証する方法
    ○ https://en-jp.wantedly.com/companies/wantedly/post_articles/305303
    ● iOS / Androidのリファラの取得方法
    ○ https://medium.com/mobile-app-development-publication/how-to-get-the-re
    ferrer-url-for-ios-and-android-995f7cc84dd1
    参考文献

    View full-size slide