Firebase Dynamic Linksは、ユーザーをモバイルアプリ内の正しい場所またはウェブサイトに導くスマートリンクを作成するGoogleのサービスです。デバイスにアプリがインストールされているかどうかに応じて動作します。Dynamic Linksは、アプリストアからのインストール後、初回起動時でも遷移コンテキストを保持します。Firebaseドキュメント(2026年)によると、動的リンクは単一のAPIで処理され、アプリを開く、ウェブサイトに移動する、アプリをインストールするという動作を自動的に決定します。このサービスは、紹介プログラム、オンボーディングシナリオ、マーケティングキャンペーンに不可欠です。
重要なポイント
Firebase Dynamic Linksは、モバイルアプリまたはウェブサイト内の目的のコンテンツに導く単一のリンクを作成するGoogleのテクノロジーです。プラットフォームとインストール状況に応じて動作を適応させます。リンクはデバイスにアプリがインストールされているかどうかを確認し、インストールされている場合はパラメータを渡してアプリを開き、インストールされていない場合はGoogle PlayまたはApp Storeにリダイレクトしてインストール後、ターゲット画面にリダイレクトします。
通常のディープリンクに対するDynamic Linksの主な利点は、遅延ディープリンクのサポートです。Deferred Deep Linkingとは、アプリがまだインストールされていない場合でも、遷移コンテキスト(リンクパラメータ)が保持されることを意味します。ユーザーがストアからアプリをインストールすると、Dynamic Links SDKが保存されたコンテキストを読み取り、目的の画面に渡します。この技術がないと、ユーザーはインストール後にメイン画面に移動するだけで、プロモコード、招待、特定の注文へのリンクを失うことになります。
Dynamic Linksは紹介プログラムで、招待者のアカウントに紐付けて新規ユーザーを獲得するために使用されます。マーケティングキャンペーンでは、メールニュースレターやソーシャルネットワークからの遷移にDynamic Linksを使用して、正確なコンバージョン測定を行います。オンボーディングシナリオでは、リンクが新規ユーザーをパーソナライズされたコンテンツのウェルカム画面に導きます。Eコマースでは、商品リンクがコンテキストを保持し、インストール後の初回起動時でも商品カードに導きます。
Dynamic Linksの仕組みは複数の段階で構成され、各段階はアプリの状態に応じて異なります。ユーザーが動的リンクをクリックすると、ブラウザがFirebaseサーバーにリクエストを送信します。Firebaseはintent-filterまたはuniversal linkの確認を通じてアプリがインストールされているかどうかをチェックします。アプリがインストールされている場合、Firebaseはディープリンクを渡してアプリを開きます。インストールされていない場合は、ストアページまたはウェブバージョンにリダイレクトします。
標準的なDynamic Linkは、ベースURL、リンクパラメータ、オプションのマーケティングタグで構成されます。ベースURLは、Firebase Consoleに登録されたyour-app.page.link形式のドメインです。ディープリンクパラメータはクエリパラメータで設定されます:link(アプリ内のターゲットURL)、apn(Androidパッケージ名)、ibi(iOSバンドルID)、stおよびsd(ソーシャルプレビューのタイトルと説明)。マーケティングタグutm_source、utm_medium、utm_campaignはトラッキングのためにGoogle Analyticsに渡されます。
| パラメータ | 説明 | 例 |
|---|---|---|
| link | ターゲットディープリンク | https://yourapp.page.link/product/123 |
| apn | Androidパッケージ名 | com.example.myapp |
| ibi | iOSバンドルID | com.example.myapp.ios |
| st | ソーシャルタイトル | 特別オファー |
| sd | ソーシャル説明 | 初回注文30%オフ |
Firebase Consoleは、Engage > Dynamic LinksセクションでDynamic Linksを作成するためのビジュアルインターフェースを提供します。コンソールでは、ディープリンク、ウェブ動作、ソーシャルメタデータ、UTMタグを含むすべてのリンクパラメータを設定できます。リンク作成後、コンソールは使用可能なURLと、クリック数や遷移数の統計を提供します。一括リンク作成には、OAuth 2.0認証付きのFirebase Dynamic Links REST APIが使用されます。
プログラムによるDynamic Linksの作成には、Firebase Dynamic Links APIへのPOSTリクエストが使用されます。リクエスト本文には、ディープリンクパラメータ、プラットフォーム設定、ソーシャルメタデータを含むdynamicLinkInfoが含まれます。APIはhttps://your-app.page.link/abc123形式の使用可能なURLを返します。長期リンクにはsuffix.option = UNIQUE(一意のサフィックス付き短縮リンク)が使用されます。一時リンクにはSHORT(衝突の可能性あり)が使用されます。
const axios = require("axios")
const apiUrl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=API_KEY"
const data = {
dynamicLinkInfo: {
domainUriPrefix: "https://yourapp.page.link",
link: "https://yourapp.com/promo/summer",
androidInfo: { androidPackageName: "com.example.myapp" },
iosInfo: { iosBundleId: "com.example.myapp.ios" },
socialMetaTagInfo: {
socialTitle: "夏季キャンペーン",
socialDescription: "月末まで最大50%オフ"
}
},
suffix: { option: "UNIQUE" }
}
axios.post(apiUrl, data)
.then(res => console.log(res.data.shortLink))
.catch(err => console.error(err))
Dynamic Linksは自動的にドメイン後6~8文字の短縮URLを生成し、SMSやソーシャルネットワークでの使用に適しています。UTMパラメータはutmParametersフィールドまたはlinkパラメータに直接追加されます。FirebaseはDynamic LinksのクリックをFirebase用Google Analyticsに自動的にリンクし、リファラルトラフィックとキャンペーンアトリビューションの追跡を可能にします。
AndroidでのDynamic Links設定には、Firebase SDKの追加、ディープリンクを受け取るアクティビティのintent-filter設定、Firebase Dynamic Links SDKによるリンク処理が含まれます。SDKのインストールとgoogle-services.jsonの追加後、アプリのドメインからのリンクを処理するためにAndroidManifest.xmlでintent-filter付きアクティビティを登録する必要があります。
Dynamic Linksを処理するアクティビティには、VIEWアクションとDEFAULTおよびBROWSABLEカテゴリのintent-filterが必要です。AndroidManifest.xmlには、ディープリンクに対応するandroid:scheme、android:host、android:pathPrefixを持つdataタグが含まれます。page.linkドメインからのリンクを処理するには、httpsスキームとDynamic Linksドメインホストを持つintent-filterも追加されます。
<!-- AndroidManifest.xml -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name=
"android.intent.action.VIEW" />
<category android:name=
"android.intent.category.DEFAULT" />
<category android:name=
"android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="yourapp.com"
android:pathPrefix="/promo" />
</intent-filter>
</activity>
intent-filterの設定後、アクティビティコードで受信したDynamic Linkを処理する必要があります。FirebaseDynamicLinks APIはintentからリンクを受け取り、抽出されたパラメータを持つPendingDynamicLinkDataオブジェクトを返します。getLinkメソッドはターゲットディープリンクを返し、解析してナビゲーションに使用できます。コールドスタート(onCreateのgetIntent経由)とホットスタート(onNewIntent経由)の両方でリンクを処理することが重要です。
iOSでのDynamic Links設定には、Firebase側とXcodeプロジェクトの両方での設定が必要です。Firebase ConsoleにAPNsキーをアップロードし、Swift Package ManagerまたはCocoaPodsを介してFirebase SDKを追加し、Universal Linksを処理するようにApp Delegateを設定する必要があります。iOSのDynamic LinksはUniversal Linksを使用して、中間ページなしでブラウザとアプリ間のシームレスな遷移を実現します。
Universal Linksは、ドメインをモバイルアプリに接続するAppleのテクノロジーです。apple-app-site-association(AASA)ファイルはhttps://your-app.page.link/apple-app-site-associationのサーバーにアップロードされます。FirebaseはDynamic Linksドメイン用にこのファイルを自動的に作成および維持します。Xcodeでは、Associated Domainsを有効にし、プロジェクトのCapabilitiesでapplinks:your-app.page.linkを指定する必要があります。
iOSの場合、Dynamic Links処理はApp DelegateまたはScene DelegateのFirebase SDKを介して行われます。application:continueUserActivity:メソッドは受信したUniversal Linkをインターセプトし、Firebase Dynamic Links APIに渡してターゲットリンクとパラメータを抽出します。Firebase SDKはFirebase Installation APIの短期ストレージを介してインストールデータを要求し、Deferred Deep Linksを自動的に処理します。
import FirebaseDynamicLinks
class AppDelegate: UIApplicationDelegate {
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping
([UIUserActivityRestoring]?) -> Void
) -> Bool {
return DynamicLinks.dynamicLinks()
.handleUniversalLink(userActivity.webpageURL!) {
dynamicLink, error in
if let link = dynamicLink?.url {
self.handleDeepLink(link)
}
}
}
}
Kotlinを使用したAndroidアプリでのDynamic Link処理の完全な例を見てみましょう。MainActivityは、アプリのコールドスタートとホットスタートの両方で受信したDynamic Linkを読み取ります。リンクはパラメータに解析され、引数を渡して目的の画面にナビゲーションするために使用されます。この例では、プロモーションキャンペーン識別子を持つプロモーションページへのリンク処理を示しています。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDynamicLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDynamicLink(intent)
}
private fun handleDynamicLink(intent: Intent) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener { data ->
val deepLink = data?.link ?: return@addOnSuccessListener
val promoId = deepLink
.getQueryParameter("promoId") ?: ""
if (promoId.isNotEmpty()) {
navigateToPromoScreen(promoId)
}
}
.addOnFailureListener { e ->
Log.e("DL", "リンク処理エラー", e)
}
}
}
Dynamic Linksのテストには、Firebase Consoleを使用します。テストリンクを作成し、メッセンジャーやメールでデバイスに送信できます。Firebase Dynamic Linksデバッガーはhttps://your-app.page.link/?d=1で利用可能で、リンクの動作に関する詳細情報を表示します。Deferred Deep Linksをテストする際は、アプリがアンインストールされていることを確認し、インストール後にリンクが渡されたパラメータで正しい画面に導くことを確認する必要があります。
よくある質問
通常のディープリンクはアプリがインストールされている場合にのみ機能し、インストール後にコンテキストを保持しません。Dynamic LinksはDeferred Deep Linkingをサポートしており、ユーザーがアプリをインストールすると、保存されたリンクパラメータとともに直ちにターゲット画面に移動します。
リンクの作成と処理にサーバーは不要です — すべての操作はFirebase Console、REST API、またはクライアント側のFirebase SDKを介して実行されます。一括リンク生成にはREST APIが推奨されますが、手動作成にはコンソールが適しています。
Dynamic Linksに有効期限はありません — 手動で削除されない限り、Firebaseに永続的に保存されます。UNIQUEサフィックスの短縮リンクは無期限に存在します。正確なアトリビューションのために、キャンペーンごとに一意のリンクを作成することをお勧めします。
Dynamic Linkの処理には、Firebaseサーバーがアプリのインストール状態を確認するため、クリック時にインターネット接続が必要です。リンク処理後、データはintentまたはUniversal Linkを介してアプリに渡され、オフラインでも利用可能になります。
Firebase Dynamic LinksはSparkプランで無料です。Blazeプランでは、追加料金なしで1日あたり5万クリックの制限があります。制限を超えると、翌日まで新しいリンクの作成がブロックされます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。