您可以使用 Firebase 動態鏈接生成器 API 創建短動態鏈接或長動態鏈接。此 API 接受長動態鏈接或包含動態鏈接參數的對象,並返回如下示例所示的 URL:
https://example.com/link/WXYZ https://example.page.link/WXYZ
設置 Firebase 和動態鏈接 SDK
您必須先包含 Firebase SDK,然後才能在 Android 應用中創建動態鏈接。如果您的應用程序設置為接收動態鏈接,則您已經完成了這些步驟,並且可以跳過此部分。
如果您尚未將 Firebase 添加到您的 Android 項目中,請將其添加到您的 Android 項目中。
註冊應用程序時,請指定您的 SHA-1 簽名密鑰。如果您使用應用程序鏈接,還請指定您的 SHA-256 密鑰。
在模塊(應用程序級)Gradle 文件(通常
<project>/<app-module>/build.gradle.kts
或<project>/<app-module>/build.gradle
)中,添加動態鏈接的依賴項安卓庫。我們建議使用Firebase Android BoM來控制庫版本控制。為了獲得動態鏈接的最佳體驗,我們建議在您的 Firebase 項目中啟用 Google Analytics ,並將適用於 Google Analytics 的 Firebase SDK 添加到您的應用中。
Kotlin+KTX
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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-ktx' implementation 'com.google.firebase:firebase-analytics-ktx' }
通過使用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-ktx:21.1.0' implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:32.3.1")) // 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:21.1.0' implementation 'com.google.firebase:firebase-analytics:21.3.0' }
- 在 Firebase 控制台中,打開動態鏈接部分。
如果您尚未接受服務條款並為動態鏈接設置域,請在出現提示時執行此操作。
如果您已有動態鏈接域,請記下它。以編程方式創建動態鏈接時,您需要提供動態鏈接域。
- 推薦:指定深層鏈接和後備鏈接中允許的 URL 模式。通過這樣做,您可以防止未經授權的各方創建從您的域重定向到您無法控制的網站的動態鏈接。請參閱允許特定 URL 模式。
使用 Firebase 控制台
如果您想生成單個動態鏈接,無論是出於測試目的,還是讓您的營銷團隊輕鬆創建可在社交媒體帖子等內容中使用的鏈接,最簡單的方法是訪問Firebase 控制台並創建一個手動按照分步表格操作。
從參數創建動態鏈接
要創建動態鏈接,請使用其生成器創建一個新的
DynamicLink
對象,並使用生成器方法指定動態鏈接參數。然後,調用buildDynamicLink
或buildShortDynamicLink
。以下最小示例創建一個指向
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.ktx.component1 and // com.google.firebase.dynamiclinks.ktx.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); // ...
動態鏈接參數
您可以使用動態鏈接生成器 API 通過任何支持的參數創建動態鏈接。有關詳細信息,請參閱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()
您可以通過以下方法設置動態鏈接參數:
動態鏈接參數 設置鏈接 您的應用程序將打開的鏈接。指定您的應用程序可以處理的 URL,通常是應用程序的內容或負載,用於啟動特定於應用程序的邏輯(例如向用戶提供優惠券或顯示歡迎屏幕)。此鏈接必須是格式良好的 URL、正確的 URL 編碼、使用 HTTP 或 HTTPS,並且不能是另一個動態鏈接。
設置DomainUriPrefix 您的動態鏈接 URL 前綴,您可以在 Firebase 控制台中找到。動態鏈接域類似於以下示例: https://example.com/link https://example.page.link
Android參數 設置後備網址 未安裝應用程序時打開的鏈接。指定此選項可以在未安裝應用程序時執行除從 Play 商店安裝應用程序之外的其他操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。 設置最低版本 可以打開鏈接的應用程序的最低版本的 versionCode
。如果安裝的應用程序是舊版本,用戶將被帶到 Play 商店升級應用程序。Ios參數 設置應用商店Id 您的應用程序的 App Store ID,用於在未安裝應用程序時將用戶引導至 App Store 設置後備網址 未安裝應用程序時打開的鏈接。指定此選項可以在未安裝應用程序時執行除從 App Store 安裝應用程序之外的其他操作,例如打開內容的移動網絡版本,或顯示應用程序的促銷頁面。 設置自定義方案 您的應用程序的自定義 URL 方案(如果定義為應用程序的捆綁包 ID 以外的其他內容) setIpadFallbackUrl 未安裝應用程序時在 iPad 上打開的鏈接。指定此選項可以在未安裝應用程序時執行除從 App Store 安裝應用程序之外的其他操作,例如打開內容的 Web 版本,或顯示應用程序的促銷頁面。 設置IpadBundleId 用於在 iPad 上打開鏈接的 iOS 應用程序的捆綁包 ID。該應用必須從 Firebase 控制台的“概述”頁面連接到您的項目。 設置最低版本 可以打開鏈接的應用程序的最低版本號。當您的應用程序打開時,此標誌會傳遞給您的應用程序,您的應用程序必須決定如何處理它。 導航信息參數 設置強制重定向啟用 如果設置為“1”,則在打開動態鏈接時跳過應用程序預覽頁面,而是重定向到應用程序或商店。當用戶在應用程序中打開動態鏈接時,應用程序預覽頁面(默認啟用)可以更可靠地將用戶發送到最合適的目的地;但是,如果您希望僅在無需此頁面即可可靠打開動態鏈接的應用程序中打開動態鏈接,則可以使用此參數禁用它。此參數僅影響 iOS 上動態鏈接的行為。 社交元標籤參數 設置標題 在社交帖子中共享動態鏈接時使用的標題。 設置描述 在社交帖子中共享動態鏈接時使用的描述。 設置圖片地址 與此鏈接相關的圖像的 URL。圖像應至少為 300x200 像素,且小於 300 KB。 GoogleAnalytics參數 設置源
設置中
設置活動
設置期限
設置內容Google Play 分析參數。這些參數( utm_source
、utm_medium
、utm_campaign
、utm_term
、utm_content
)會傳遞到 Play 商店並附加到鏈接負載中。ItunesConnectAnalytics參數 設置提供商令牌
設置附屬令牌
設置活動令牌iTunes Connect 分析參數。這些參數( pt
、at
、ct
)被傳遞到 App Store。縮短長動態鏈接
要縮短長動態鏈接,請使用
setLongLink
指定動態鏈接的 URL,而不是使用其他構建器方法設置參數: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 // ... }
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 // ... } } });
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2023-09-26 (世界標準時間)。
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"缺少我需要的資訊" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"過於複雜/步驟過多" },{ "type": "thumb-down", "id": "outOfDate", "label":"過時" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻譯問題" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"示例/程式碼問題" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"容易理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"確實解決了我的問題" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]