在 Android 上建立 Dynamic Links

您可以使用 Firebase Dynamic Links Builder API 建立短或長 Dynamic Links。這個 API 會接受長 Dynamic Link 或含有 Dynamic Link 參數的物件,並傳回以下範例中的網址:

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

您必須先納入 Firebase SDK,才能在 Android 應用程式中建立 Dynamic Links。如果應用程式已設定為接收 Dynamic Links,表示您已完成這些步驟,可以略過本節。

  1. 如果您尚未將 Firebase 新增至 Android 專案,請新增 Firebase

    註冊應用程式時,請指定 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 Analytics 專用 Firebase SDK 新增至應用程式。

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.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. 建議:指定深層連結和備用連結中允許的網址模式。這樣一來,您就能防止未經授權的對象建立 Dynamic Links,從您的網域重新導向至您無法控管的網站。請參閱「允許特定網址模式」。

使用 Firebase 主控台

如果您想產生單一 Dynamic Link,無論是為了測試,還是讓行銷團隊輕鬆建立可用於社群媒體貼文等內容的連結,最簡單的方法就是前往 Firebase 控制台,然後按照逐步表單手動建立。

如要建立 Dynamic Link,請使用建構工具建立新的 DynamicLink 物件,並使用建構工具方法指定 Dynamic Link 參數。接著,呼叫 buildDynamicLinkbuildShortDynamicLink

以下簡單範例會建立長 Dynamic Linkhttps://www.example.com/,在 Android 上透過 Android 應用程式和 iOS 上的應用程式 com.example.ios 開啟:

Kotlin

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

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
                    // ...
                }
            }
        });

根據預設,系統會使用 17 個字元的連結後置字元產生短 Dynamic Links,因此使用者幾乎不可能猜到有效的 Dynamic Link。如果在您的用例中,有人成功猜出短網址並無妨,您可能會偏好產生只需足夠長度來確保唯一性的後置字串,您可以將 ShortDynamicLink.Suffix.SHORT 傳遞至 buildShortDynamicLink 方法來執行這項操作:

Kotlin

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

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

應用程式會開啟的連結。指定應用程式可處理的網址,通常是應用程式內容或酬載,可啟動應用程式專屬邏輯 (例如使用優待券為使用者加分或顯示歡迎畫面)。這個連結必須是格式正確的網址、正確的網址編碼、使用 HTTP 或 HTTPS,且不得是另一個 Dynamic Link。

setDomainUriPrefix Dynamic Link 網址前置字元,您可以在 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 未安裝應用程式時要開啟的連結。指定這個值,即可在未安裝應用程式時,執行其他操作 (例如開啟內容的行動版網頁版本,或顯示應用程式宣傳頁面),而非安裝應用程式。
setCustomScheme 應用程式的自訂網址通訊協定 (如果已定義為應用程式的軟體包 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 與此連結相關的圖片網址。圖片尺寸不得小於 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,請使用 setLongLink 指定 Dynamic Link 的網址,而非使用其他建構工具方法設定參數:

Kotlin

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
                    // ...
                }
            }
        });