在 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

如要在 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 獲得最佳體驗,建議你 正在啟用 Google Analytics ,然後將 Google Analytics 專用 Firebase SDK 加進應用程式。

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.2.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.1.0'
    }
    敬上
    在尋找 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 物件,並使用該物件的 建構工具,使用 Builder 方法指定 Dynamic Link 參數。接著,呼叫 buildDynamicLinkbuildShortDynamicLink

下列最簡單的範例會建立較長的 Dynamic Link, 在 Android 裝置上透過 Android 應用程式開啟的 https://www.example.com/ 以及 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();

如要建立簡短的 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.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 參考資料

下列範例會建立包含多個常見參數的 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

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

setDomainUriPrefix Dynamic Link 網址前置字串,可在 Firebase 控制台中找到。A 罩杯 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 Link 開啟時略過應用程式預覽頁面,改為重新導向至應用程式或商店。使用者在應用程式中開啟 Dynamic Links 時,應用程式預覽頁面 (預設為啟用) 能以更可靠的方式將使用者帶往最適當的目的地;不過,如果您預期 Dynamic Link 只會在沒有這個頁面可順利開啟 Dynamic Links 的應用程式中開啟,則可使用這個參數停用。這個參數只會影響 Dynamic Link 在 iOS 上的行為。
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。

如要縮短較長的 Dynamic Link,請使用以下項目指定 Dynamic Link 的網址: 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
                    // ...
                }
            }
        });