Firebase Dynamic Linksは、アプリがインストールされているかどうかに関係なく、ユーザーをアプリ内の適切な場所に誘導するスマートリンクを作成するためのGoogleのサービスです。Firebaseドキュメントによると、Dynamic Linksはアプリがインストールされていない場合、ユーザーをApp StoreまたはGoogle Playに自動的にリダイレクトし、インストール後に遷移コンテキストを復元します。Firebaseのスマートリンクは、未インストールのアプリでは機能しないURL Schemeの問題を解決します。
重要なポイント
Firebase Dynamic Linksは、iOSおよびAndroidのモバイルアプリ向けに統合ユニバーサルリンクを作成するGoogleのクラウドサービスです。動的リンクにはアプリ内コンテンツへのディープリンクが含まれていますが、通常のHTTPSリンクのように動作します:アプリがインストールされている場合は直接開き、インストールされていない場合はアプリストアにリダイレクトします。
通常のURL Schemeとは異なり、Dynamic Linksはdeferred deep linkテクノロジーにより、未インストールのアプリでも機能します。ユーザーがリンクをクリックした後にアプリをインストールすると、Firebaseは遷移パラメータを保存し、初回起動時に渡します。これにより、紹介プログラム、マーケティングキャンペーン、招待状の機会が広がります。
URL Schemeではアプリのインストールが必要であり、標準的なフォールバックメカニズムがありません。Firebase Dynamic Linksは、デバイス上のアプリのインストール状況を判断し、ユーザーを正しくルーティングする中間Firebaseウェブサービスを通じてこの問題を解決します。同時に、1つのリンクが両方のプラットフォームで同じように機能します。
Firebase Dynamic Linkは、Firebase Consoleで登録されるyourcode.page.linkのようなドメインを使用します。ユーザーがそのようなリンクをクリックすると、Firebaseはデバイスの種類とアプリのインストール状況を判断します。iOSではUniversal Linksメカニズムが使用され、AndroidではDigital Asset Linksによる自動検証付きのApp Linksが使用されます。
処理フローには複数の順次段階が含まれます:リンクがクリックされると、ブラウザがFirebaseサーバーにGETリクエストを送信し、サーバーがプラットフォームを判断してデバイス上のアプリの有無を確認します。アプリがインストールされている場合は、ターゲット画面を開くためのパラメータ付きのUniversal LinkまたはIntentへのリダイレクトが生成されます。アプリがインストールされていない場合は、ダウンロードのためにApp StoreまたはGoogle Playにリダイレクトします。
アプリはFirebase SDKの初期化中にリンクを受け取ります。getDynamicLink()メソッドは、遷移データを含むPendingResultを返します。取得に成功すると、ディープリンクパラメータ、分析用のUTMタグ、リンク作成時に渡された任意のデータが抽出されます。
Firebase ConsoleはDynamic Linksを作成するためのビジュアルインターフェースを提供します。開発者はディープリンクURL、キャンペーン名、iOSとAndroidの設定を個別に、そして分析パラメータを指定します。作成後、Firebaseはhttps://yourcode.page.link/abc123のような短いリンクを生成し、広告資料、メールキャンペーン、ソーシャルネットワークで使用できます。
プログラムによるDynamic Linksの作成には、Firebase REST APIまたはクライアントSDKが使用されます。REST APIを使用すると、ソーシャルネットワークリンクや非同期クリック分析を含むカスタムパラメータを使用して、マーケティングキャンペーン用のリンクを一括生成できます。APIを介してリンクを作成する際は、socialMetaTagInfoパラメータを正しく指定することが重要です。これにより、メッセンジャーやソーシャルネットワークでプレビューカード付きで共有されたときのリンクの表示方法が決まります。
| パラメータ | 目的 | 必須 |
|---|---|---|
| Deep Link URL | アプリコンテンツへの内部リンク | はい |
| iOS Bundle ID | App Store内のアプリ識別子 | iOSの場合 |
| Android Package Name | Google Play内のパッケージ名 | Androidの場合 |
| Fallback URL | アプリがない場合のウェブページ | いいえ |
| UTMタグ | Google Analytics用のパラメータ | いいえ |
iOSでFirebase Dynamic Linksを扱うには、CocoaPodsまたはSwift Package Managerを介してFirebase SDKを統合し、GOOGLE_APP_IDを含むInfo.plistを設定し、プロジェクトのAssociated DomainsにDynamic Linksドメインを登録する必要があります。その後、アプリはFirebaseによって生成されたUniversal Linksを自動的に処理します。
Xcodeでは、applinks:yourcode.page.linkのようなエントリでAssociated Domains機能を追加する必要があります。Firebase SDKはUniversal Linksを処理するためにapplication(_:continue:restorationHandler:)メソッドを使用するため、AppDelegateとの追加の統合は必要ありません。FirebaseはUser Activityから自動的にDynamic Linkパラメータを抽出します。
Firebaseの適切な初期化とDynamic Linkハンドラ登録のためのInfo.plist設定の例。FIROptionsキーにはGoogleService-Info.plistのプロジェクト識別子を含める必要があります。
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://yourcode.page.link</string>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
AppDelegateプロキシが無効になっている場合は、handleUniversalLink(_:)メソッドを手動で呼び出し、continue NSUserActivityからUser Activityを渡す必要があります。Firebase SDKは自動的にリンクパラメータを抽出し、completion handlerを介してDynamicLinkを返します。
Androidでは、Firebase Dynamic Linksの統合は、build.gradleへの依存関係の追加とFirebase Consoleからのgoogle-services.jsonファイルの追加から始まります。Dynamic LinksドメインはFirebase Consoleで登録され、その後、このドメインを持つすべてのリンクは、action VIEWを持つIntent Filterを介してAndroidアプリによって自動的に認識されます。正しく動作させるには、ルートとモジュールのbuild.gradleにGoogle Servicesプラグインを追加し、Gradleの同期を実行する必要もあります。
Androidでリンクを正しく処理するには、受信リンクを受け取るActivityにDynamic Linksドメイン用のIntent Filterを追加する必要があります。フィルタにはhttpsスキーム、Dynamic Linksドメインホスト、デフォルトパスを含める必要があります。
yourcode.page.linkドメインでDynamic Linksを受信するためのAndroidManifest.xmlのIntent Filterの例。
<activity android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter
android:autoVerify="true">
<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="yourcode.page.link" />
</intent-filter>
</activity>
Dynamic Linksを受信するActivityのlaunchModeをsingleTaskに設定することが重要です。これにより、リンクを繰り返しクリックしたときに新しいActivityインスタンスが作成されるのを防ぎ、すべての受信ディープリンクを単一のインスタンスで処理できます。
Android用のFirebase SDKはFirebaseDynamicLinks.getInstance().getDynamicLink(intent)メソッドを提供し、リンクデータを含むPendingTaskオブジェクトを返します。DynamicLinkオブジェクトから、ディープURI、UTMパラメータ、遷移タイムスタンプが抽出されます。処理はActivityのonCreate()およびonNewIntent()メソッドで実行することをお勧めします。
処理時には、Dynamic Linkがコールドスタートからアプリを起動するときと、別のアプリから既に実行中のアプリに遷移するときの両方で受信される可能性があることを考慮することが重要です。2番目のケースでは、onNewIntent()をオーバーライドしてDynamic Linkのチェックを再度呼び出す必要があります。
MainActivityでのFirebase Dynamic Linkの受信と処理の例。コードはコールドスタートと別のアプリからの遷移の両方を処理します。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checkDynamicLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
checkDynamicLink(intent)
}
private fun checkDynamicLink(intent: Intent) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener link ->
val deepLink = link?.link.toString()
handleDeepLink(deepLink)
}
}
}
addOnSuccessListenerメソッドはDynamicLinkを返し、そこからlink?.linkを介してターゲットリンクが抽出されます。リスナーがnullを返す場合、IntentにDynamic Linkが含まれていないことを意味します。これは受信リンクのない通常のアプリ起動です。クリック分析用のUTMタグも利用可能で、campaign、medium、source、contentが含まれており、各マーケティングチャネルの効果を詳細に評価するためにGoogle Analyticsに渡すことができます。
よくある質問
Firebase Dynamic Linksはdeferred deep linkをサポートしています。アプリがインストールされていない場合でもリンクはコンテキストを保持します。インストール後、アプリはすべての遷移パラメータを受け取ります。これは通常のURL SchemeやUniversal Linksでは不可能です。
Firebase Dynamic Linksは無料のFirebase Spark料金プランに含まれています。作成できるリンクの数に制限はありません。ただし、2024年以降、Googleは新しいインフラストラクチャへの移行を発表しているため、条件が変更される可能性があります。
Dynamic Linksはモバイルアプリケーション向けに設計されています。デスクトップウェブブラウザからリンクをクリックすると、フォールバックURLが開きます。ウェブアプリケーションには、通常のリンクまたは独自のリダイレクトロジックを使用してください。
Firebase Consoleには、動作をプレビューするためのTest Dynamic Linkボタンがあります。Firebase SDKをインストールしたAndroidエミュレータまたはiOSシミュレータを使用して、すべての遷移シナリオをローカルでテストすることもできます。
短いFirebase Dynamic Linkは、page.linkドメインと約7文字のランダムなサフィックスで構成されています。全長は約30文字です。内部のディープリンクは任意の長さにできますが、互換性のために2 KB以内に抑えることをお勧めします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。