Android でダイナミック リンクを作成する

Firebase Dynamic Links Builder API を使用して、短い、もしくは長い Dynamic Links を作成できます。この API は、長い Dynamic Link または Dynamic Link パラメータを含むオブジェクトのいずれかを受け入れ、次の例のような URL を返します。

https://example.com/link/WXYZ
https://example.page.link/WXYZ

Android アプリで Dynamic Links を作成する前に、Firebase SDK をインクルードしておく必要があります。アプリが Dynamic Links を受信するように設定されている場合、この手順はすでに完了しているため、このセクションをスキップして構いません。

  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] セクションを開きます。
  4. 利用規約に同意せずに Dynamic Links のドメインを設定している場合、プロンプトに従って利用規約に同意します。

    Dynamic Links のドメインが作成済みである場合は、それをメモしておきます。Dynamic Links をプログラムで作成する場合は、Dynamic Links ドメインを指定する必要があります。

  5. 推奨: ディープリンクやフォールバック リンクで許可する URL パターンを指定します。これにより、不正なユーザーがお客様のドメインからお客様の管理外のサイトへリダイレクトする Dynamic Links を作成することを防ぎます。 特定の URL パターンを許可するをご覧ください。

Firebase コンソール の使用

テスト用や、マーケティング チームがソーシャル メディア投稿用にリンクを簡単に作成できるよう、単一の Dynamic Link を生成したい場合、Firebase コンソールを開き、各手順が示されたフォームに沿って手動で作成するのが最も簡単です。

Dynamic Link を作成するには、Builder で新しい DynamicLink オブジェクトを作成します。このとき、Builder メソッドで Dynamic Link のパラメータを指定します。次に、buildDynamicLink または buildShortDynamicLink を呼び出します。

次のシンプルな例では、Android アプリ(Android の場合)とアプリ com.example.ios(iOS の場合)で開く https://www.example.com/ への長い Dynamic Link を作成します。

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Open links with this app on Android
    androidParameters { }
    // Open links with com.example.ios on iOS
    iosParameters("com.example.ios") { }
}

val dynamicLinkUri = dynamicLink.uri

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Open links with this app on Android
        .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
        // Open links with com.example.ios on iOS
        .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
        .buildDynamicLink();

Uri dynamicLinkUri = dynamicLink.getUri();

短い Dynamic Link を作成するには、同じ方法で DynamicLink を作成してから buildShortDynamicLink を呼び出します。短いリンクの作成にはネットワーク呼び出しが必要となるため、buildShortDynamicLink はリンクを直接返すのではなく、Task を返します。これにより、リクエストが完了したときに短いリンクが利用可能になります。次に例を示します。

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Set parameters
    // ...
}.addOnSuccessListener { (shortLink, flowchartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowchartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Set parameters
        // ...
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

デフォルトでは、短い Dynamic Links は 17 文字のリンク サフィックス付きで生成されるため、他の誰かが有効な Dynamic Link を推測することはほぼ不可能です。アプリの使用状況を考慮したうえで、短いリンクが他者に知られても無害だと判断できる場合、一意にするために必要な最短のサフィックスを生成できます。そのようなサフィックスを生成するには、ShortDynamicLink.Suffix.SHORTbuildShortDynamicLink メソッドに渡します。

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
    // Set parameters
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        // ...
        .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
        // ...

Dynamic Link Builder API を使用して、サポートされている任意のパラメータが設定された Dynamic Links を作成できます。詳細については、API リファレンスを参照してください。

次の例では、いくつかの一般的なパラメータが設定された Dynamic Link を作成します。

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
    googleAnalyticsParameters {
        source = "orkut"
        medium = "social"
        campaign = "example-promo"
    }
    itunesConnectAnalyticsParameters {
        providerToken = "123456"
        campaignToken = "example-promo"
    }
    socialMetaTagParameters {
        title = "Example of a Dynamic Link"
        description = "This link works whether the app is installed or not!"
    }
}

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .setGoogleAnalyticsParameters(
                new DynamicLink.GoogleAnalyticsParameters.Builder()
                        .setSource("orkut")
                        .setMedium("social")
                        .setCampaign("example-promo")
                        .build())
        .setItunesConnectAnalyticsParameters(
                new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
                        .setProviderToken("123456")
                        .setCampaignToken("example-promo")
                        .build())
        .setSocialMetaTagParameters(
                new DynamicLink.SocialMetaTagParameters.Builder()
                        .setTitle("Example of a Dynamic Link")
                        .setDescription("This link works whether the app is installed or not!")
                        .build())
        .buildDynamicLink();  // Or buildShortDynamicLink()

Dynamic Link のパラメータは、次のメソッドで設定できます。

DynamicLink のパラメータ
setLink

アプリで開くリンク。アプリで処理可能な URL を指定します。通常、この URL はアプリ固有のロジック(ユーザーへのクーポン付与や特定の開始画面の表示など)を起動するアプリのコンテンツやペイロードへのリンクです。このリンクは適切な形式の URL で、正しく URL エンコードされている必要があります。HTTP または HTTPS のいずれかを使用してください。他のダイナミック リンクは使用できません。

setDomainUriPrefix Dynamic Link の URL 接頭辞。Firebase コンソールで確認できます。 Dynamic Link ドメインは次の例のようになります。
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに Play ストアからアプリをインストールする以外の動作を指定できます。
setMinimumVersion リンクを開くことができるアプリの最小バージョンの versionCode。インストールされているアプリのバージョンがそれよりも古い場合、ユーザーは Play ストアにリダイレクトされ、アプリのアップグレードを促されます。
IosParameters
setAppStoreId アプリの App Store ID。アプリがインストールされていない場合に、ユーザーを App Store に転送するために使用します。
setFallbackUrl アプリがインストールされていない場合に開くリンク。モバイルウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作を指定できます。
setCustomScheme アプリのカスタム URL スキーム(アプリのバンドル ID とは異なるものを定義している場合)。
setIpadFallbackUrl アプリがインストールされていない場合に iPad で開くリンク。ウェブ バージョンのコンテンツを開いたり、アプリの宣伝ページを開いたりするなど、アプリがインストールされていないときに App Store からアプリをインストールする以外の動作を指定できます。
setIpadBundleId iPad でリンクを開くために使う iOS アプリのバンドル ID。Firebase コンソールの [概要] ページで、アプリとプロジェクトが接続されている必要があります。
setMinimumVersion リンクを開くことができるアプリの最小バージョンのバージョン番号。このフラグは、リンクを開くとアプリに渡されますが、処理方法はアプリ側で決める必要があります。
NavigationInfoParameters
setForcedRedirectEnabled 「1」に設定されている場合は、Dynamic Link が開かれたときにアプリのプレビュー ページをスキップし、代わりにアプリまたはストアにリダイレクトします。アプリのプレビュー ページ(デフォルトで有効)を使用すると、ユーザーがアプリで Dynamic Links を開いたときに、最適な宛先に確実に誘導できます。ただし、このページを使用せずに Dynamic Links を確実に開くことができるアプリでのみ Dynamic Link を開くようにする場合は、このパラメータを使用して無効にできます。このパラメータは、iOS の Dynamic Link の動作のみに影響します。
SocialMetaTagParameters
setTitle ソーシャル投稿で Dynamic Link を共有するときに使用するタイトル。
setDescription ソーシャル投稿で Dynamic Link を共有するときに使用する説明。
setImageUrl このリンクに関連する画像への URL。画像は 300 x 200 ピクセル以上、300 KB 未満である必要があります。
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
Google Play の解析パラメータ。これらのパラメータ(utm_sourceutm_mediumutm_campaignutm_termutm_content)は、リンクのペイロードに追加されるだけでなく、Play ストアにも渡されます。
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
iTunes Connect の解析パラメータ。これらのパラメータ(ptatct)は App Store に渡されます。

長い Dynamic Link を短縮するには、他の Builder メソッドでパラメータを設定する代わりに、setLongLink を使用して Dynamic Link の URL を指定します。

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    longLink = Uri.parse(
        "https://example.page.link/?link=" +
            "https://www.example.com/&apn=com.example.android&ibn=com.example.ios",
    )
}.addOnSuccessListener { (shortLink, flowChartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowChartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });