Check out what’s new from Firebase at Google I/O 2022. Learn more

在 Android 上創建動態鏈接

您可以使用 Firebase Dynamic Links Builder API 創建短動態鏈接或長動態鏈接。此 API 接受長動態鏈接或包含動態鏈接參數的對象,並返回類似於以下示例的 URL:

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

在您的 Android 應用中創建動態鏈接之前,您必須包含 Firebase SDK。如果您的應用設置為接收動態鏈接,則您已經完成了這些步驟,您可以跳過此部分。

  1. 如果您還沒有,請將 Firebase 添加到您的 Android 項目中。

    當您註冊您的應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用 App Links,請同時指定您的 SHA-256 密鑰。

  2. 使用Firebase Android BoM ,在模塊(應用級)Gradle 文件(通常是app/build.gradle )中聲明 Dynamic Links Android 庫的依賴項。

    為了獲得動態鏈接的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將 Firebase SDK for Google Analytics 添加到您的應用中。

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare 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 {
        // Declare 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:21.0.1'
        implementation 'com.google.firebase:firebase-analytics:21.0.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.0')
    
        // Declare 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-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    通過使用Firebase Android BoM ,您的應用將始終使用兼容版本的 Firebase Android 庫。

    (替代)使用 BoM 的情況下聲明 Firebase 庫依賴項

    如果您選擇不使用 Firebase BoM,則必須在其依賴行中指定每個 Firebase 庫版本。

    請注意,如果您在應用中使用多個Firebase 庫,我們強烈建議您使用 BoM 來管理庫版本,以確保所有版本都兼容。

    dependencies {
        // Declare 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-ktx:21.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
    }
    
  3. 在 Firebase 控制台中,打開動態鏈接部分。
  4. 如果您尚未接受服務條款並為您的動態鏈接設置域,請在出現提示時執行此操作。

    如果您已經有一個動態鏈接域,請記下它。當您以編程方式創建動態鏈接時,您需要提供動態鏈接域。

  5. 推薦:指定深層鏈接和後備鏈接中允許的 URL 模式。通過這樣做,您可以防止未經授權的各方創建從您的域重定向到您無法控制的網站的動態鏈接。請參閱允許特定的 URL 模式

使用 Firebase 控制台

如果您想生成單個動態鏈接,無論是出於測試目的,還是讓您的營銷團隊輕鬆創建可用於社交媒體帖子等內容的鏈接,最簡單的方法是訪問Firebase 控制台並創建一個手動按照分步表格進行操作。

要創建動態鏈接,請使用其 Builder 創建一個新的DynamicLink對象,並使用 Builder 方法指定動態鏈接參數。然後,調用buildDynamicLinkbuildShortDynamicLink

以下最小示例創建了一個指向https://www.example.com/的長動態鏈接,該鏈接在 Android 上的 Android 應用和 iOS 上的應用com.example.ios中打開:

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

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

要創建短動態鏈接,請以相同方式構建DynamicLink ,然後調用buildShortDynamicLink 。構建短鏈接需要網絡調用,因此buildShortDynamicLink不是直接返回鏈接,而是返回一個Task ,這使得短鏈接在請求完成時可用。例如:

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

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.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

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

默認情況下,會生成帶有 17 個字符的鏈接後綴的短動態鏈接,這使得人們很難猜出有效的動態鏈接。如果對於您的用例,有人成功猜出短鏈接並沒有什麼害處,您可能更願意生成只要需要唯一的後綴,您可以通過將ShortDynamicLink.Suffix.SHORT傳遞給buildShortDynamicLink方法來實現:

Java

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

Kotlin+KTX

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

您可以使用 Dynamic Link Builder API 使用任何受支持的參數創建動態鏈接。有關詳細信息,請參閱API 參考

以下示例創建了一個包含多個常用參數集的動態鏈接:

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

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!"
    }
}

您可以通過以下方法設置動態鏈接參數:

動態鏈接參數
設置鏈接

您的應用將打開的鏈接。指定您的應用程序可以處理的 URL,通常是應用程序的內容或負載,它會啟動特定於應用程序的邏輯(例如向用戶提供優惠券或顯示歡迎屏幕)。此鏈接必須是格式正確的 URL、正確的 URL 編碼、使用 HTTP 或 HTTPS,並且不能是另一個動態鏈接。

setDomainUriPrefix您可以在 Firebase 控制台中找到您的動態鏈接網址前綴。動態鏈接域類似於以下示例:
https://example.com/link
https://example.page.link
安卓參數
setFallbackUrl未安裝應用程序時打開的鏈接。指定此項以在未安裝應用程序時從 Play 商店安裝應用程序以外的其他操作,例如打開內容的移動 Web 版本,或顯示應用程序的促銷頁面。
設置最小版本可以打開鏈接的應用的最低版本的versionCode 。如果安裝的應用程序是舊版本,則用戶將被帶到 Play 商店以升級應用程序。
IOS參數
設置AppStoreId您應用的 App Store ID,用於在未安裝應用時將用戶引導至 App Store
setFallbackUrl未安裝應用程序時打開的鏈接。指定此項以在未安裝應用程序時從 App Store 安裝應用程序以外的其他操作,例如打開內容的移動 Web 版本,或顯示應用程序的促銷頁面。
設置自定義方案您的應用的自定義 URL 方案(如果定義為您的應用的捆綁包 ID 以外的內容)
setIpadFallbackUrl未安裝應用程序時在 iPad 上打開的鏈接。指定此項以在未安裝應用程序時從 App Store 安裝應用程序以外的其他操作,例如打開內容的 Web 版本,或顯示應用程序的促銷頁面。
setIpadBundleId用於在 iPad 上打開鏈接的 iOS 應用程序的捆綁包 ID。該應用必須從 Firebase 控制台的概覽頁面連接到您的項目。
設置最小版本可以打開鏈接的應用的最低版本。此標誌在打開時傳遞給您的應用程序,您的應用程序必須決定如何處理它。
導航信息參數
setForcedRedirectEnabled如果設置為“1”,則在打開動態鏈接時跳過應用預覽頁面,而是重定向到應用或商店。應用預覽頁面(默認啟用)在用戶打開應用中的動態鏈接時,可以更可靠地將用戶引導至最合適的目的地;但是,如果您希望僅在可以在沒有此頁面的情況下可靠地打開動態鏈接的應用中打開動態鏈接,則可以使用此參數禁用它。此參數只會影響動態鏈接在 iOS 上的行為。
社交元標記參數
設置標題在社交帖子中共享動態鏈接時使用的標題。
設置描述在社交帖子中共享動態鏈接時使用的描述。
設置圖片網址與此鏈接相關的圖像的 URL。圖片至少應為 300x200 像素,且小於 300 KB。
谷歌分析參數
設置源
設置中
設置活動
設置期限
設置內容
谷歌播放分析參數。這些參數( utm_sourceutm_mediumutm_campaignutm_termutm_content )被傳遞到 Play 商店並附加到鏈接有效負載中。
iTunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
iTunes Connect 分析參數。這些參數( ptatct )被傳遞到 App Store。

要縮短長動態鏈接,請使用setLongLink指定動態鏈接的 URL,而不是使用其他構建器方法設置參數:

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

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.ktx.component1 and
    // com.google.firebase.dynamiclinks.ktx.component2

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