在 Android 上建立 Dynamic Links

您可以使用 Firebase Dynamic Links Builder API 建立短或長的 Dynamic Links。這個 API 可接受長的動態連結或包含動態連結參數的物件,並傳回網址,範例如下:

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

您必須先加入 Firebase SDK,才能在 Android 應用程式中建立 Dynamic Links。如果您的應用程式已設為接收 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 控管程式庫的版本管理。

    為了讓動態連結獲得最佳體驗,建議您在 Firebase 專案中啟用 Google Analytics (分析),並將 Google Analytics (分析) 專用 Firebase SDK 新增至應用程式。

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.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 程式庫版本。

    (替代做法) 新增 Firebase 程式庫依附元件,「不」使用 BoM

    如果選擇不使用 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.0.1'
    }
    
    在尋找 Kotlin 專用的程式庫模組嗎?2023 年 10 月 (Firebase BoM 32.5.0) 起,Kotlin 和 Java 開發人員都能使用主要的程式庫模組 (詳情請參閱這項計畫的常見問題)。
  3. 在 Firebase 控制台中開啟「Dynamic Links」部分。
  4. 如果您尚未接受服務條款及為 Dynamic Links 設定網域,請按照系統提示操作。

    如果您已經有 Dynamic Links 網域,請加以記下。透過程式輔助方式建立 Dynamic Links 時,您必須提供 Dynamic Links 網域。

  5. 建議:指定深層連結和備用連結允許的網址模式。這樣一來,就能避免未經授權的對象建立動態連結,將該網域重新導向到由您控管的網站。請參閱「允許特定網址模式」。

使用 Firebase 控制台

如果您想產生單一動態連結 (無論是為了測試目的,或是要讓行銷團隊輕鬆建立可用於社群媒體貼文等項目的連結),最簡單的方法就是造訪 Firebase 主控台,然後按照逐步表單手動建立。

如要建立動態連結,請使用建構工具建立新的 DynamicLink 物件,並使用建構工具方法指定 Dynamic Link 參數。然後呼叫 buildDynamicLinkbuildShortDynamicLink

下列最精簡的範例會建立指向 https://www.example.com/ 的長動態連結,藉此透過 Android 上的 Android 應用程式和 iOS 應用程式 com.example.ios 開啟:

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();

如要建立短動態連結,請以相同方式建構 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
                    // ...
                }
            }
        });

根據預設,簡短的動態連結會產生 17 個字元的連結後置字串,避免他人猜到有效的動態連結。以您的用途來說,如果使用者成功猜到短連結並沒有傷害,則可以將 ShortDynamicLink.Suffix.SHORT 傳遞至 buildShortDynamicLink 方法,以產生不重複的後置字串,但可以執行此操作:

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 參考資料

下例會使用幾個常用參數集建立動態連結:

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()

您可以使用下列方法設定動態連結參數:

DynamicLink 參數
setLink

應用程式會開啟的連結。指定應用程式可處理的網址,通常是應用程式的內容或酬載,從而啟動應用程式專屬的邏輯 (例如運用優待券獎勵使用者,或顯示歡迎畫面)。這個連結必須是格式正確的網址、採用正確的網址編碼、使用 HTTP 或 HTTPS,且不能是其他動態連結。

setDomainUriPrefix 動態連結網址前置字串,可在 Firebase 控制台中找到。Dynamic Link 網域如以下範例所示:
https://example.com/link
https://example.page.link
Android 參數
setFallbackUrl 未安裝應用程式時開啟的連結。除了從 Play 商店安裝應用程式之外,您也可以指定上述操作以外的操作,例如開啟行動版網站內容,或顯示應用程式的宣傳頁面。
setMinimumVersion 可開啟連結的應用程式最低版本 versionCode。如果安裝的應用程式是較舊的版本,系統會引導使用者前往 Play 商店升級應用程式。
iOS 參數
setAppStore ID 應用程式的 App Store ID,可在未安裝應用程式時將使用者導向 App Store
setFallbackUrl 未安裝應用程式時開啟的連結。除了從 App Store 安裝應用程式之外,請指定這項額外操作;例如,開啟行動版網站的內容,或顯示應用程式的宣傳頁面。
setCustomScheme 應用程式的自訂網址通訊協定 (如果定義並非應用程式軟體包 ID)
setIpadFallbackUrl 未安裝應用程式時,在 iPad 上開啟的連結。除了從 App Store 安裝應用程式之外,請指定這項額外操作,例如開啟網頁內容或顯示應用程式的宣傳頁面。
setIpadBundleId 要在 iPad 上開啟連結的 iOS 應用程式軟體包 ID。應用程式必須在 Firebase 控制台的「總覽」頁面中,連結至您的專案。
setMinimumVersion 可開啟連結的應用程式最低版本版本號碼。此旗標會在應用程式開啟時傳遞至應用程式,因此應用程式必須決定使用方式。
NavigationInfo 參數
setForcedRedirectEnabled 如果設為「1」,請在開啟動態連結時略過應用程式預覽頁面,改為重新導向至應用程式或商店。使用者在應用程式中開啟 Dynamic Links 時,應用程式預覽頁面 (預設為啟用) 可更穩定地將他們導向最適當的目的地;不過,如果您希望動態連結只有在沒有這個網頁也能順利開啟 Dynamic Links 的應用程式中開啟,就可以使用這個參數停用。這個參數只會影響 iOS 上的 Dynamic Links 行為。
SocialMetaTagParameters
設定標題 在社群媒體貼文中分享 Dynamic Link 時使用的標題。
setDescription 在社群媒體貼文中分享 Dynamic Link 時使用的說明。
setImageUrl 這個連結相關圖片的網址。圖片不得小於 300x200 像素,小於 300 KB。
GoogleAnalytics (分析) 參數
setSource
setMedium
setCampaign
setTerm
setContent
Google Play 數據分析參數。這些參數 (utm_sourceutm_mediumutm_campaignutm_termutm_content) 會傳遞至 Play 商店,並附加至連結酬載。
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
iTunes 連結數據分析參數。這些參數 (ptatct) 會傳遞到 App Store。

如要縮短較長的動態連結,請使用 setLongLink 指定動態連結的網址,而不要使用其他建構工具方法設定參數:

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