Android で Firebase Dynamic Links を受信する

作成した Firebase Dynamic Links を受信するには、アプリに Dynamic Links SDK を組み込み、アプリが読み込まれるときに FirebaseDynamicLinks.getDynamicLink() メソッドを呼び出して、Dynamic Link で渡されたデータを取得する必要があります。

  1. まだ追加していない場合は、Firebase を Android プロジェクトに追加します

    アプリを登録するときは、SHA-1 の署名鍵を指定してください。アプリリンクを使用する場合は SHA-256 の鍵も指定します。

  2. モジュール(アプリレベル)の Gradle ファイル(通常は <project>/<app-module>/build.gradle.kts または <project>/<app-module>/build.gradle)に、Android 用 Dynamic Links ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。

    Dynamic Links でのエクスペリエンスを最適化するために、Firebase プロジェクトで Google Analytics を有効にして、Google アナリティクス用の Firebase SDK をアプリに追加することをおすすめします。

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.6.0"))
    
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

    (代替方法)BoM を使用せずに Firebase ライブラリの依存関係を追加する

    Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。

    アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。

    dependencies {
        // Add the dependencies for the Dynamic Links and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-dynamic-links:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:22.1.2'
    }
    
    Kotlin 固有のライブラリ モジュールをお探しの場合、 2023 年 10 月(Firebase BoM 32.5.0)以降、Kotlin と Java のどちらのデベロッパーもメイン ライブラリ モジュールを利用できるようになります(詳しくは、このイニシアチブに関するよくある質問をご覧ください)。
  3. Firebase コンソールで、[Dynamic Links] セクションを開きます。利用規約に同意するための画面が表示された場合は、同意します。

通常のディープリンクと同様に、アプリのディープリンクを処理するアクティビティに新しいインテント フィルタを追加する必要があります。アプリがインストールされた場合に Dynamic Link がドメインへのリダイレクトを実行することになっているため、そのドメインのディープリンクをインテント フィルタでキャッチする必要があります。これは、アプリが Play ストアからインストールまたは更新され、[続行] ボタンがタップされた後に Dynamic Link データを受け取るために必要です。AndroidManifest.xml では次のようになります。

<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:host="example.com"
        android:scheme="https"/>
</intent-filter>

指定したスキームとホストへのディープリンクを持つ Dynamic Link をユーザーが開くと、アプリはこのインテント フィルタを使用してリンクを処理するアクティビティを開始します。

ディープリンクを受信するには、getDynamicLink() メソッドを次のように呼び出します。

Kotlin+KTX

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...
    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

リンクによって起動されるすべてのアクティビティで getDynamicLink() を呼び出してください。getIntent().getData() を使用してインテントからリンクを取得できる場合でも呼び出す必要があります。getDynamicLink() を呼び出すと、リンクが取得されてデータがクリアされるため、アプリで処理されるのは 1 回だけとなります。

通常、メイン アクティビティの getDynamicLink() と一緒に、リンクに一致するインテント フィルタで起動したアクティビティも呼び出します。

分析用データを記録する

次のイベントは Google Analytics で自動的に追跡し、Firebase コンソールに表示することができます。

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

これらのイベントを登録するには、ディープリンクを取得する前に Google Analytics を構成する必要があります。次の条件が満たされていることを確認します。

  • アプリのエントリ ポイントで FirebaseDynamicLinks.getDynamicLink() を呼び出す。
    • ランチャー アクティビティ。例: action="android.intent.action.MAIN"category="android.intent.category.LAUNCHER"
    • アクティビティのエントリ ポイント。例: onStart()onCreate()
    • ディープリンク アクティビティ。
  • Google Analytics のセットアップと使用
    • Google Analytics の依存関係を含めます。通常、google-services Gradle プラグインで自動的に追加されます。
    • アプリに google-services.json 構成ファイルを組み込む
    • FirebaseDynamicLinks.getDynamicLink() の前に FirebaseAnalytics.getInstance() を呼び出す。

Android 6.0(API レベル 23)以降では、アプリがすでにインストールされている場合に、Android アプリリンクを使用して Dynamic Links を直接処理するようにアプリを設定できます。

Firebase コンソールで、アプリの SHA256 証明書のフィンガープリントがプロジェクトに追加されていることを確認します。Dynamic Links は、Dynamic Links ドメインに対してアプリリンクのウェブサイトの関連付けを設定します。

Dynamic Link を処理するアクティビティに、自動検証されたインテント フィルタを追加します。その際、ホストは Firebase コンソールにあるプロジェクトの Dynamic Links ドメインに設定します。AndroidManifest.xml で次のように記述します。

<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:host="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

android:host は、ディープリンクのドメインではなく、Dynamic Links ドメインに設定する必要があります。

アプリリンクでエンゲージメントを促進するには、マニフェストのすべての autoVerify インテント フィルタを登録する必要があります。Firebase は、Dynamic Links ドメインにこの処理を自動的に行いますが、Dynamic Links ドメインでホストされている assetlinks.json ファイルを開いて設定を確認することもできます。

https://YOUR_DOMAIN/.well-known/assetlinks.json
すべての Firebase アプリのパッケージ名を含める必要があります。

以上で、Dynamic Links がアプリに直接送信されるようになります。アプリリンクのインテント フィルタを追加したアクティビティの getDynamicLink() を呼び出すことで、ディープリンクやその他の Dynamic Link データを取得できます(ディープリンクを処理するをご覧ください)。

注: アプリリンクからの呼び出しはユーザーをアプリに直接誘導するため、ダイナミック リンクは必要な最小バージョンの情報を使用できません。したがって、アプリが開かれた後に、ダイナミック リンクの最小バージョン(getminimumappversion)と PackageInfo.versionCode を比較する必要があります。その後、必要に応じて getUpdateAppIntent を使用してユーザーにアップグレードを求める案内を表示します。