Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

在 Android 上創建動態鏈接

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

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

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

  1. 如果你還沒有,添加火力地堡到您的Android項目

    註冊應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用應用鏈接,還要指定您的 SHA-256 密鑰。

  2. 使用火力地堡Android的物料清單,聲明你的模塊(應用程序級)搖籃文件(通常為動態鏈接庫的Android的依賴app/build.gradle )。

    對於動態鏈接的最佳體驗,我們建議讓谷歌Analytics(分析)在您的火力地堡項目,並添加火力地堡SDK為谷歌Analytics(分析)應用程式。

    爪哇

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

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

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

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    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:20.1.1'
        implementation 'com.google.firebase:firebase-analytics:19.0.2'
    }
    

    科特林+KTX

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

    通過使用火力地堡Android的物料清單,您的應用程序將始終使用火力地堡的Android庫的兼容版本。

    (替代)聲明火力地堡庫依賴使用物料清單

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

    需要注意的是,如果你在你的應用程序使用多個火力地堡庫,我們強烈建議您使用的物料清單管理庫版本,以保證所有版本相互兼容。

    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:20.1.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:19.0.2'
    }
    
  3. 在火力地堡控制台,打開動態鏈接部分。
  4. 如果您尚未接受服務條款並為您的動態鏈接設置域,請在出現提示時進行。

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

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

使用 Firebase 控制台

如果你想生成一個動態鏈接,無論是出於測試目的,或為營銷團隊可以輕鬆地創建可以像使用社交媒體帖子中使用的鏈接,最簡單的方法是將訪問火力地堡控制台,並創建一個按照分步表格手動操作。

要創建一個動態鏈接,創建一個新的DynamicLink其生成的對象,指定與建造方法的動態鏈接參數。然後,調用buildDynamicLinkbuildShortDynamicLink

下面的小例子,創建一個長期的動態鏈接https://www.example.com/與您在Android和應用Android應用打開com.example.ios iOS上:

爪哇

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

科特林+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 ,這使得短鏈接可請求完成時。例如:

爪哇

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

科特林+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.SHORTbuildShortDynamicLink方法:

爪哇

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

科特林+KTX

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

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

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

爪哇

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

科特林+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
安卓參數
設置回退網址未安裝應用程序時打開的鏈接。指定此項以在未安裝應用程序時從 Play 商店安裝應用程序以外的其他操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。
設置最小版本versionCode的您的應用程序的最低版本,可以打開鏈接。如果安裝的應用程序是舊版本,用戶將被帶到 Play 商店升級應用程序。
IOS參數
設置AppStoreId您的應用程序的 App Store ID,用於在未安裝應用程序時將用戶發送到 App Store
設置回退網址未安裝應用程序時打開的鏈接。指定此項以在未安裝應用程序時從 App Store 安裝應用程序以外的其他操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。
設置自定義方案您的應用程序的自定義 URL 方案(如果定義為應用程序包 ID 以外的其他內容)
設置IpadFallbackUrl未安裝應用程序時在 iPad 上打開的鏈接。指定此項以在未安裝應用程序時從 App Store 安裝應用程序以外的其他操作,例如打開內容的網絡版本,或顯示應用程序的促銷頁面。
設置IpadBundleId用於在 iPad 上打開鏈接的 iOS 應用程序包 ID。應用程序必須從 Firebase 控制台的概覽頁面連接到您的項目。
設置最小版本版本號的您的應用程序的最低版本,可以打開鏈接。這個標誌在你的應用程序打開時傳遞給它,你的應用程序必須決定如何處理它。
導航信息參數
設置強制重定向啟用如果設置為“1”,則在打開動態鏈接時跳過應用預覽頁面,而是重定向到應用或商店。應用預覽頁面(默認啟用)可以在用戶打開應用中的動態鏈接時更可靠地將用戶送到最合適的目的地;但是,如果您希望動態鏈接僅在可以在沒有此頁面的情況下可靠地打開動態鏈接的應用程序中打開,您可以使用此參數禁用它。此參數僅影響 iOS 上動態鏈接的行為。
社交元標籤參數
設置標題在社交帖子中共享動態鏈接時使用的標題。
設置說明在社交帖子中共享動態鏈接時使用的描述。
設置圖片網址與此鏈接相關的圖像的 URL。圖片應至少為 300x200 像素,且小於 300 KB。
谷歌分析參數
設置源
設置中
設置廣告系列
設置期限
設置內容
Google Play 分析參數。這些參數( utm_sourceutm_mediumutm_campaignutm_termutm_content )被傳遞到以及附加的鏈接有效載荷Play商店。
ItunesConnectAnalytics 參數
設置提供者令牌
設置附屬令牌
設置CampaignToken
iTunes Connect 分析參數。這些參數( ptatct )被傳遞到App Store。

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

爪哇

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

科特林+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
    // ...
}