您可以使用 Firebase Dynamic Links Builder API 创建短动态链接或长动态链接。此 API 接受长动态链接或包含动态链接参数的对象,并返回如下例所示的 URL:
https://example.com/link/WXYZ https://example.page.link/WXYZ
设置 Firebase 和动态链接 SDK
在您的 Android 应用程序中创建动态链接之前,您必须包含 Firebase SDK。如果您的应用设置为接收动态链接,则您已完成这些步骤,可以跳过此部分。
如果您还没有,请将 Firebase 添加到您的 Android 项目中。
当您注册您的应用程序时,请指定您的 SHA-1 签名密钥。如果您使用 App Links,还请指定您的 SHA-256 密钥。
在您的模块(应用程序级别)Gradle 文件(通常是
<project>/<app-module>/build.gradle
)中,添加动态链接 Android 库的依赖项。我们建议使用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:31.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-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.2.0' }
Java
dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:31.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 库。
(备选)在不使用 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.2.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); // ...
动态链接参数
您可以使用 Dynamic Link Builder 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,并且不能是另一个动态链接。
设置域名 UriPrefix 您的动态链接网址前缀,您可以在 Firebase 控制台中找到它。动态链接域类似于以下示例: https://example.com/link https://example.page.link
安卓参数 setFallbackUrl 未安装应用程序时打开的链接。指定此项以在未安装应用程序时执行除从 Play 商店安装应用程序以外的操作,例如打开内容的移动网络版本,或显示应用程序的促销页面。 设置最低版本 可以打开链接的应用 versionCode
的最低版本的版本代码。如果安装的应用程序是旧版本,用户将被带到 Play 商店升级应用程序。Ios参数 设置AppStoreId 您应用的 App Store ID,用于在未安装应用时将用户引导至 App Store setFallbackUrl 未安装应用程序时打开的链接。指定此选项以在未安装应用程序时执行除从 App Store 安装应用程序之外的操作,例如打开内容的移动网络版本,或显示应用程序的促销页面。 设置自定义方案 您应用的自定义 URL 方案(如果定义为您应用的捆绑包 ID 以外的内容) setIpadFallbackUrl 未安装应用程序时在 iPad 上打开的链接。指定此选项以在未安装应用程序时执行除从 App Store 安装应用程序之外的操作,例如打开内容的 Web 版本,或显示应用程序的促销页面。 设置IpadBundleId 在 iPad 上用于打开链接的 iOS 应用程序的包 ID。该应用程序必须从 Firebase 控制台的概览页面连接到您的项目。 设置最低版本 可以打开链接的应用程序的最低版本号。此标志在打开时传递给您的应用程序,您的应用程序必须决定如何处理它。 导航信息参数 setForcedRedirectEnabled 如果设置为“1”,则在打开动态链接时跳过应用程序预览页面,而是重定向到应用程序或商店。应用预览页面(默认启用)可以更可靠地将用户在应用中打开动态链接时发送到最合适的目的地;但是,如果您希望仅在无需此页面即可可靠打开动态链接的应用程序中打开动态链接,则可以使用此参数禁用它。此参数仅会影响动态链接在 iOS 上的行为。 社交元标签参数 设置标题 在社交帖子中共享动态链接时使用的标题。 设置说明 在社交帖子中共享动态链接时使用的描述。 设置图片网址 与此链接相关的图像的 URL。图片应至少为 300x200 像素,且小于 300 KB。 谷歌分析参数 设置来源
设置介质
设置活动
设置期限
设置内容Google Play 分析参数。这些参数( utm_source
、utm_medium
、utm_campaign
、utm_term
、utm_content
)被传递到 Play Store 并附加到链接负载。ItunesConnectAnalytics参数 设置提供者令牌
setAffiliateToken
设置CampaignTokeniTunes 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 // ... } } });
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2023-01-26 UTC.
[{ "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":"其他" }]