Slide 1

Slide 1 text

『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入と Deeplink最適化 2024/11/22 Hirokazu Tanaka

Slide 2

Slide 2 text

Hirokazu Tanaka 株式会社 サイバーエージェント 23年度入社 株式会社 WinTicket techiro appgrape 自己紹介

Slide 3

Slide 3 text

2025年8月25日 3

Slide 4

Slide 4 text

Firebase Dynamic Links(FDL)廃止 4

Slide 5

Slide 5 text

FDLってなに? 🤔 5

Slide 6

Slide 6 text

Firebase Dynamic Links について Firebase Dynamic Links(以下FDL)は、ユーザーをスムーズにアプリ内コン テンツに誘導するためのリンク技術。ユーザーがリンクをクリックした際、アプリ のインストール状況に応じて最適な画面に誘導する 6

Slide 7

Slide 7 text

Firebase Dynamic Links について 大きく5つの使い方が出来る 7

Slide 8

Slide 8 text

1. Deeplink (アプリがインストール済みの場合) ● リンクをクリック時にアプリが起動し、指定された画面に直接アクセス 8 ユーザーはすぐに目的のコンテンツに到達できるため、体験がスムーズ

Slide 9

Slide 9 text

2. Deferred Deeplink(アプリ未インストールの場合) ● リンクのクリック時に、アプリストア(Google PlayやApp Store)に誘導 ● ユーザーがアプリをインストールすると、初回起動時に指定されたコンテンツ画面 が開く 9 新規のユーザーに対しても目的のコンテンツに到達可能

Slide 10

Slide 10 text

3. リンク プレビューを生成する タイトル: アミメキリン 説明: アミメキリンは別名ソマリアキリン 画像: 画像への URL 10 X・FacebookなどSNSサービスに渡すことができ、 OGP画像などに表示される https://firebase.google.com/docs/dynamic-links/link-previews?hl=ja リンクに画像情報や、説明を付与する事が可能

Slide 11

Slide 11 text

4. クリックリンクの分析 11 UTMパラメーターを付与することで、 Google Analyticsで分析が可能

Slide 12

Slide 12 text

クリックリンクの分析 12 UTMパラメーターを付与することで、 Google Analyticsで分析が可能 https://example.page.link?utm_campaign=auth-email&utm_medium=e mail&utm_source=example 自ずと、リンクが長くなってしまうのでリンクを短くしたい

Slide 13

Slide 13 text

5. ショートリンクの作成 短縮されたURLを生成する機能 13 主な特徴 ● URLの見た目が簡潔で共有しやすい https://goo.gl/xyz https://example.page.link/lang%3Dja&apn=jp.example.app&amv&utm_campaign=auth-email&utm_medium =email&utm_source=example

Slide 14

Slide 14 text

Firebase Dynamic Linksの特徴 1. Deeplink (アプリがインストール済みの場合) 2. Deferred Deeplink(アプリ未インストールの場合) 3. リンク プレビュー 4. クリックリンクの分析 5. ショートリンクの作成 14 マーケティングに 活用 シームレスな ユーザー体験

Slide 15

Slide 15 text

Firebaseの声明 15 https://firebase.google.com/support/dynamic-links-faq?hl=ja

Slide 16

Slide 16 text

FDLが廃止される背景 16 技術的な進化と課題 ● ネイティブAPIの進化により、FDLの安定性と機能がその進化 に追従しきれなくなった ● 理想的でない体験の提供が課題となっていた

Slide 17

Slide 17 text

FDLが廃止した後はどうなるか? ● 提供されるすべてのDeeplinkは機能しなくなる ● クリックされたすべてのリンクは、HTTP 404 (not found)になりアクセス ができなくなる 17 FDLから他の代替手段に移行を完了しないと、 ユーザーはコンテンツにアクセスができなくなる 2025年8月25日〆

Slide 18

Slide 18 text

どういうアプローチをするか?🤔 18

Slide 19

Slide 19 text

今回のセッションの前提 19 techiroが向き合ったアプローチを紹介します 当時のtechiroの状態 ● FDLちょっとわかる ● どこでどの様に使われているか把握できていない 目的 今後のFDLから代替手段に移行を行うすべてのエンジニア向け

Slide 20

Slide 20 text

FDL廃止へのアプローチ 20 FDLの移行開始から完了までの具体的な流れ 1つ1つのステップを紹介する

Slide 21

Slide 21 text

1. FDLのリンクの特定を行う 21 どこで何を使っているのかを把握する

Slide 22

Slide 22 text

FDLはどんなときに使われる? 22 FDLは柔軟なリンク生成が可能で、様々なユースケースで利用される 例: - データ分析 - キャンペーン計測 - ショートリンク - シンプルなURL - シェア機能 - 動的なリンクが必要なユースケース - ログイン機能

Slide 23

Slide 23 text

FDLが使われる用途の例(WINTICKETの場合) 23 - マーケティング - 新規ユーザー獲得キャンペーン流入の計測 - 広告 - キャンペーン記事の閲覧計測 - 機能的要件 - メールリンク認証 - ログイン、メール通知

Slide 24

Slide 24 text

FDLは4つの方法でリンクを作成可能 24 4つの方法からFDLのリンクを生成できる ● Firebase Console ● Dynamic Link Builder API ● REST API ● 手動 https://firebase.google.com/docs/dynamic-links/create-links

Slide 25

Slide 25 text

Firebase Console上で発行 25 キャンペーンリンクをコンソール上で簡単に発行が可能 クリック数や、アプリ インストール数などのメトリクスを見れる https://firebase.google.com/docs/dynamic-links/analytics?hl=ja

Slide 26

Slide 26 text

カスタムドメインに注意 26 基本的にFDLのリンクは page.link で構成されるが、 自由にカスタム ドメインを設定する事が可能 firebase.json Firebase Console上

Slide 27

Slide 27 text

Dynamic Link Builder APIで発行 27 FlutterSDKなどクライアントから リンクを生成する方法 - 即時リンク生成 - ショートリンク機能 クライアントでリンク生成したい場合に利 用 https://github.com/firebase/flutterfire/blob/main/docs/dynamic-links/create.md

Slide 28

Slide 28 text

REST API で発行 28 Builder API を使用できないプラットフォームで利用可能 例: IoT環境、SDK導入に制限がある場合など https://firebase.google.com/docs/dynamic-links/analytics?hl=ja

Slide 29

Slide 29 text

手動で発行 29 リンクを自分で組み立てて、 柔軟なリンク生成が可能 注意点 - クリックデータを追跡出来な い - リンクが長くなる https://firebase.google.com/docs/dynamic-links/analytics?hl=ja

Slide 30

Slide 30 text

FDLの発行場所のおさらい 30 FDLの発行場所は以下の 4つ - Firebase Console - Dynamic Link Builder API - REST API - 手動 これらの発行場所を確認するとFDLのリンクを特定できる

Slide 31

Slide 31 text

実はFDLの廃止は例外が存在 Firebase メールリンク認証 を行っている場合 引き続きがpage.linkのホストのURL が発行され、そのまま利用することが 可能 31 利用していない場合は、 FDLの考慮は不要 https://www.google.com/url?q=https://firebase.g oogle.com/support/dynamic-links-faq?hl%3Dja% 23i_need_to_onboard_onto_firebase_dynamic_lin ks_to_enable_email_link_auth_in_firebase_authe ntication_what_should_i_do&sa=D&source=editor s&ust=1732164972379634&usg=AOvVaw2MFF4IF0 EIJpyQSZhJzUFn

Slide 32

Slide 32 text

リンクの整理 リンクの特定が出来たら、 次は、洗い出したFDLのリンクがどのよう な目的で利用されているか整理 32

Slide 33

Slide 33 text

大きく2つの考え方でリンクを整理する ● ユーザー体験 ○ どんな体験をさせたいか? ● マーケティング ○ どの程度まで計測したいか? リンクの整理 33 各リンクの目的を明確にすることで、 適切な打ち手を見つける

Slide 34

Slide 34 text

リンクの目的から対応方針を決める 34 以下の3つのケースに分ける ● FDLの機能が必要ない場合 ● インストール済みのアプリに対する Deeplinkのみが必要な場合 ● FDLのすべての機能が必要な場合 洗い出したリンクの目的をFDLの利用に照らし合わせる

Slide 35

Slide 35 text

1. FDLの機能が必要ない 35 アプリからFirebase Dynamic Links SDK を削除する そもそも、FDLのリンクが運用されていない

Slide 36

Slide 36 text

2. インストール済みのアプリに対するDeeplink のみが必要な場合 36 アプリリンク/ユニバーサルリンクを利用する

Slide 37

Slide 37 text

FDL vs アプリリンク/ユニバーサルリンク 37 https://firebase.google.com/support/guides/app-links-universal-links?hl=ja

Slide 38

Slide 38 text

アプリリンク/ユニバーサルリンクに乗り換え 出来ること出来ないことの表 38 https://firebase.google.com/support/guides/app-links-universal-links?hl=ja アプリリンク /ユニバーサルリンクは アプリインストール後のシンプルな画面遷移の みを提供

Slide 39

Slide 39 text

任意のアプリの任意の画面に遷移させるURL、またはそれを扱う仕組みの総称 Firebase Dynamic Links ⛔2025/8/25 廃止 カスタムURL スキーム 🤖 アプリリンク 🍎 ユニバーサルリンク Deep Linkについて 39

Slide 40

Slide 40 text

インストール済みのアプリに対するDeeplinkの みが必要な場合 40 🚛 引っ越し Firebase Dynamic Links ⛔2025/8/25 廃止 🤖 アプリリンク 🍎 ユニバーサルリンク

Slide 41

Slide 41 text

リンクからアプリのページが開かれるまでの流れ 41 https://speakerdeck.com/cyberagentdevelopers/guard-todeep-link-wohuo-yong-sita-nabigesiyonguan-li

Slide 42

Slide 42 text

リンクをクリックしてアプリを開く 42 Deeplinkをアプリが 受け取れる必要がある

Slide 43

Slide 43 text

Deeplinkのハンドリングについて 43

Slide 44

Slide 44 text

Deeplinkのハンドリングについて Deeplinkのナビゲーション方法について詳しく知りたい方は、こちらの資料を ご覧ください。 44 https://speakerdeck.com/cyberagentdevelopers/guard-todeep-link-wohuo-yong-sita-nabigesiyonguan-li

Slide 45

Slide 45 text

Deeplink実現に使用したパッケージ 45 Deeplinkを扱えるパッケージは多数存在するが、 今回はapp_linksを利用

Slide 46

Slide 46 text

app_linksパッケージ ● FlutterでDeeplinkを扱えるようにするパッケージ ● アプリリンク/ユニバーサルリンク カスタムURLスキームなどに対応 ● ほとんどのPlatformに対応 46 https://github.com/llfbandit/app_links

Slide 47

Slide 47 text

app_linksパッケージ uriLinkStreamを呼ぶと、Flutterの世界にリンクを持ち出すことが可能 47 https://github.com/llfbandit/app_links

Slide 48

Slide 48 text

app_linksパッケージ利用の注意点 Flutter 3.24.0〜 Flutter ios/Runner/Info.plist android/app/src/main/AndroidManifest.xml 48 https://github.com/llfbandit/app_links

Slide 49

Slide 49 text

アプリリンク/ユニバーサルリンクを有効化する ための必要手順 ● iOS ○ apple-app-site-association(AASA)ファイルのホスティング ● Android ○ digital asset linkファイルのホスティング 49 app_linksパッケージに加え、 Nativeの実装や、ホスティングの設定が必要

Slide 50

Slide 50 text

ユニバーサルリンクを使うために iOSのネイティブ側に必要な設定 50

Slide 51

Slide 51 text

Associated Domainの設定 Xcode > Signing & Capabilities > Associated Domains 51

Slide 52

Slide 52 text

apple-app-site-association(AASA)ファイル 52 teamID bundleID ファイル形式: Content-Type: application/json

Slide 53

Slide 53 text

AASAファイルをApple CDNと連携 53 アプリとウェブサイトの関連付けを Appleに認識させる必要がある 1. AASAファイルを準備する 2. .well-knownディレクトリにHTTPSでホスト 3. ユニバーサルリンクのテスト https://developer.apple.com/documentation/technotes/tn3155-debugging-universal-links#Understand-Apples-CDN

Slide 54

Slide 54 text

AASAファイルを配置しても iOSでリンクが開かないときのトラブルシュート 手順1: iPhone > 開発者モード>ユニバーサルリンクをON 54 手順2: Xcode > Associated Domainsの設定で applinks:sample.com?mode=developerを指定

Slide 55

Slide 55 text

AASAファイルを配置しても iOSでリンクが開かないときのトラブルシュート 手順3: iPhone > 開発者モード>ユニバーサルリンク>診断 55 ✅が付けばAASAファイルが認識されたことになる

Slide 56

Slide 56 text

Androidのネイティブ側に必要な 設定について 56

Slide 57

Slide 57 text

Androidの設定 android/app/src/main/AndroidManifest.xml 57 パッケージの設定 に従う

Slide 58

Slide 58 text

assetlinks.json ファイルのホスティング 58 package_name: Androidアプリのパッケージ名を指定 sha256_cert_fingerprints: アプリの署名証明書のSHA256フィンガープ リントを設定 SHA256の作成 keytool -list -v -keystore -alias

Slide 59

Slide 59 text

Deeplinkのデバッグ方法 59

Slide 60

Slide 60 text

FlutterのDevToolsを使ってDeeplinkを試す DeepLink Validator Flutter SDK 3.19 の DevTools に追加 Deeplinkのセットアップにおけるエラー の特定とトラブルシューティングを支援 ※ iOSは今後追加予定 60 https://docs.flutter.dev/tools/devtools/deep-links

Slide 61

Slide 61 text

AndroidStudio: App Links Assistant Android Studioでも Devtools のDeeplink Validatorと同様の機 能が使える 61

Slide 62

Slide 62 text

App Links Assistant 設定したいURLを入れる とintent-filterを自動で 修正 62

Slide 63

Slide 63 text

Deeplinkの検証をするときの便利コマンド Android adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d “https://example.com/detail” iOS xcrun simctl openurl booted “https://example.com/detail” 63 ※のちほど資料展開します

Slide 64

Slide 64 text

以上で、Deeplinkの設定方法は終了 64

Slide 65

Slide 65 text

3. FDLの機能がすべて必要な場合 65 リンクプロバイダサービスにリプレイスする

Slide 66

Slide 66 text

リンクの特定 66 Deeplinkを提供しているリンクプロバイダサービス 今回は抜粋して 4つ紹介します

Slide 67

Slide 67 text

以下の3つの指標で比較 ● 料金 ● 機能 ● Flutterとの親和性 67 ※2024年11月22日時点

Slide 68

Slide 68 text

68 Adjust ● 料金 ○ アトリビューション数に応じた課金 ● 機能 ○ 詳細な分析でキャンペーンを最大化 ○ Deferred Deep Link実現可能 ● Flutterとの親和性 ○ 日本向けのドキュメントが豊富 ○ FlutterSDK 57likes https://www.adjust.com/ja/solutions/deep-linking/ https://dev.adjust.com/en/sdk/flutter/?version=v5

Slide 69

Slide 69 text

69 KOCHAVA ● 料金 ○ 月間1万回のコンバージョンまで無料 ○ それ以上は要問い合わせ ● 機能 ○ SmartLinks™ ○ トラッキングと分析機能 ● Flutterとの親和性 ○ 英語ドキュメント ○ Flutter SDK 1likes https://www.kochava.com/product/deep-linking/?int -link=menu-dynamic-deep-linking https://support.kochava.com/sdk-integration/flutter- sdk-integration/

Slide 70

Slide 70 text

70 AppsFlyer ● 料金 ○ 無料プランあり ○ Enterpriseプランは要問い合わせ ● 機能 ○ Deferred Deep Link実現可能 ○ トラッキングと分析機能 ● Flutterとの親和性 ○ 日本向けのドキュメントが豊富 ○ Flutter SDK 129likes https://www.appsflyer.com/ja/products/customer-exp erience-deep-linking/ https://github.com/AppsFlyerSDK/appsflyer-flutter-plugin

Slide 71

Slide 71 text

71 branch.io ● 料金 ○ 価格は要問い合わせ ● 機能 ○ Deferred Deep Link実現可能 ○ 広告キャンペーン効果測定 ● Flutterとの親和性 ○ 英語ドキュメント ○ Flutter SDK 191likes https://www.branch.io/deep-linking/ https://pub.dev/packages/flutter_branch_sdk

Slide 72

Slide 72 text

Deeplink技術のメリット ● シームレスなUX ● トラフィックの増加 ● パーソナライズされたアプリ体験 ● エンゲージメントを向上 72 用途や状況に応じた技術選定が重要

Slide 73

Slide 73 text

WINTICKET では 73 リンクプロバイダサービスへの乗り換え先はAdjustを利用 Adjustに乗り換えた理由 もともとキャンペーン運用などでAdjustを導 入しており新規導入の手間やコストを最小 限に抑えるため

Slide 74

Slide 74 text

Adjustで出来ることの簡単な紹介 74

Slide 75

Slide 75 text

中間ページにとどまらずに画面遷移する FDL Deeplink画面遷移時に、中間ページを挟んでいた Adjust 中間ページを挟まずに直接リンク先に誘導できる 75 ※FDL

Slide 76

Slide 76 text

Adjustソーシャルメディア共有プレビュー XやFaceBookなどSNSに投稿する 際のOGPの設定、Previewが可能 76

Slide 77

Slide 77 text

77 Adjustによるキャンペーンデータのトラッキング Adjustでは、UTMパラメータと同じようにキャンペーンURLを生成可能 ○ キャンペーン名(campaign) ○ 広告ソース(source) ○ 広告の種類(medium) ○ クリエイティブ情報(creative) 細かいターゲットURLを生成可能

Slide 78

Slide 78 text

Adjustで出来るマーケティング例 ● 成果報酬型のキャンペーンの実施したい ○ アフィリエイトキャンペーンで新規ユーザーの獲得 78 一気通貫でユーザーの行動をトラッキング可能

Slide 79

Slide 79 text

FDLの移行完了までの最後のステップ FDLリンクの利用箇所の確認 ● FDLの利用が減っているか? ● リンクプロバイダサービスの利用が増えているか? 79

Slide 80

Slide 80 text

FDLの利用箇所が 0になったか? Google Analyticsで自動で、計測しているログを出力する 80 https://firebase.google.com/docs/dynamic-links/analytics?hl=ja

Slide 81

Slide 81 text

簡単な確認方法 Firebase Console > Analyticsで利用状況を確認する 81 これらのイベントが0に収束しているかの確認

Slide 82

Slide 82 text

BigQueryからデータを確認 GA4とBigQueryを連携している場合はクエリを書くことで抽出も可能 82 これらのイベントが0に収束しているかの確認

Slide 83

Slide 83 text

Adjustの利用状況が 増えているか? Adjust > レポート 83 アクセス数の確認 FDLから乗り換えたリンクのアクセス数の確認

Slide 84

Slide 84 text

これらのすべてのステップを完了す ることで 移行完了🎉 84 ※ クライアントでのFDLのリンクのハンドリングは 既存のユーザーに影響が出ないように2025年8月25日までは残す

Slide 85

Slide 85 text

まとめ 85 ● 2025年8月25日にFDLが廃止される ○ まだ対応していない方は早めの計画を ● FDLの移行の移行完了までをステップバイステップで紹介 ○ リンクの洗い出し、整理方法の共有 ○ アプリリンク/ユニバーサルリンクの利用の説明 ○ WINTICKETで採用しているAdjustの一例を紹介 ○ FDLのアクセスが減っていること ○ Adjustのアクセスが増えていること

Slide 86

Slide 86 text

ご清聴ありがとうございました 86