获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

在 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. 在您的模块(应用级)Gradle 文件(通常是<project>/<app-module>/build.gradle )中,添加动态链接 Android 库的依赖项。我们建议使用Firebase Android BoM来控制库版本控制。

    为了获得动态链接的最佳体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将 Firebase SDK for Google Analytics 添加到您的应用中。

    Java

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

    Kotlin+KTX

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