Tạo đường liên kết động trên Android

Bạn có thể tạo Dynamic Links ngắn hoặc dài bằng API Trình tạo Firebase Dynamic Links. API này chấp nhận Dynamic Link dài hoặc một đối tượng chứa các tham số Dynamic Link và trả về các URL như các ví dụ sau:

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

Trước khi có thể tạo Dynamic Links trong ứng dụng Android, bạn phải thêm SDK Firebase. Nếu ứng dụng của bạn được thiết lập để nhận Dynamic Links, thì bạn đã hoàn tất các bước này và có thể bỏ qua phần này.

  1. Nếu bạn chưa thực hiện, hãy thêm Firebase vào dự án Android.

    Khi đăng ký ứng dụng, hãy chỉ định khoá ký SHA-1. Nếu bạn sử dụng Liên kết trong ứng dụng, hãy chỉ định khoá SHA-256.

  2. Trong tệp Gradle (ở cấp ứng dụng) của mô-đun (thường là <project>/<app-module>/build.gradle.kts hoặc <project>/<app-module>/build.gradle), hãy thêm phần phụ thuộc cho thư viện Dynamic Links dành cho Android. Bạn nên dùng Firebase Android BoM để kiểm soát việc tạo phiên bản thư viện.

    Để có trải nghiệm tối ưu với Dynamic Links, bạn nên bật Google Analytics trong dự án Firebase và thêm SDK Firebase cho Google Analytics vào ứng dụng.

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

    Bằng cách sử dụng Firebase Android BoM, ứng dụng của bạn sẽ luôn sử dụng những phiên bản tương thích của thư viện Android trên Firebase.

    (Phương án thay thế)  Thêm các phần phụ thuộc thư viện Firebase mà không sử dụng BoM

    Nếu chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phần phụ thuộc của thư viện đó.

    Lưu ý rằng nếu sử dụng nhiều thư viện Firebase trong ứng dụng, thì bạn nên dùng BoM để quản lý các phiên bản thư viện. Điều này đảm bảo rằng tất cả các phiên bản đều tương thích.

    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:22.1.0'
        implementation 'com.google.firebase:firebase-analytics:22.1.2'
    }
    Bạn đang tìm một mô-đun thư viện dành riêng cho Kotlin? Kể từ tháng 10 năm 2023 (Firebase BoM 32.5.0), cả nhà phát triển Kotlin và Java đều có thể phụ thuộc vào mô-đun thư viện chính (để biết thông tin chi tiết, hãy xem Câu hỏi thường gặp về sáng kiến này).
  3. Trong bảng điều khiển Firebase, hãy mở phần Dynamic Links.
  4. Nếu bạn chưa chấp nhận điều khoản dịch vụ và đặt miền cho Dynamic Links, hãy làm như vậy khi được nhắc.

    Nếu bạn đã có miền Dynamic Links, hãy ghi lại miền đó. Bạn cần cung cấp một miền Dynamic Links khi tạo Dynamic Links theo phương thức lập trình.

  5. Nên dùng: Chỉ định các mẫu URL được phép trong đường liên kết sâu và đường liên kết dự phòng. Bằng cách đó, bạn ngăn các bên trái phép tạo Dynamic Links chuyển hướng từ miền của bạn đến các trang web mà bạn không kiểm soát. Xem phần Cho phép các mẫu URL cụ thể.

Sử dụng bảng điều khiển Firebase

Nếu bạn muốn tạo một Dynamic Link cho mục đích thử nghiệm hoặc để nhóm tiếp thị dễ dàng tạo một đường liên kết có thể dùng trong bài đăng trên mạng xã hội, cách đơn giản nhất là truy cập vào bảng điều khiển của Firebase và tạo một đường liên kết theo cách thủ công theo biểu mẫu từng bước.

Để tạo Dynamic Link, hãy tạo một đối tượng DynamicLink mới bằng Trình tạo, chỉ định các tham số Dynamic Link bằng các phương thức Trình tạo. Sau đó, hãy gọi buildDynamicLink hoặc buildShortDynamicLink.

Ví dụ tối thiểu sau đây sẽ tạo một Dynamic Link dài đến https://www.example.com/ mở bằng ứng dụng Android trên Android và ứng dụng com.example.ios trên 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();

Để tạo một Dynamic Link ngắn, hãy tạo một DynamicLink theo cách tương tự, sau đó gọi buildShortDynamicLink. Việc tạo đường liên kết ngắn sẽ đòi hỏi một lệnh gọi mạng. Vì vậy, thay vì trực tiếp trả về đường liên kết, buildShortDynamicLink sẽ trả về một Task để cung cấp đường liên kết ngắn khi yêu cầu hoàn tất. Ví dụ:

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.component1 and
    // com.google.firebase.dynamiclinks.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
                    // ...
                }
            }
        });

Theo mặc định, Dynamic Links ngắn được tạo bằng hậu tố đường liên kết gồm 17 ký tự, giúp giảm thiểu khả năng người khác đoán được Dynamic Link hợp lệ. Nếu trong trường hợp sử dụng của mình, việc người khác đoán chính xác đường liên kết ngắn không gây hại gì, bạn nên tạo hậu tố chỉ dài vừa đủ để duy nhất. Bạn có thể thực hiện việc này bằng cách truyền ShortDynamicLink.Suffix.SHORT vào phương thức buildShortDynamicLink:

Kotlin+KTX

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

Java

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

Bạn có thể sử dụng API Trình tạo Dynamic Link để tạo Dynamic Links bằng bất kỳ tham số nào được hỗ trợ. Hãy xem Tài liệu tham khảo API để biết thông tin chi tiết.

Ví dụ sau đây tạo một Dynamic Link với một số tham số phổ biến được đặt:

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

Bạn có thể đặt các tham số Dynamic Link bằng các phương thức sau:

Thông số DynamicLink
setLink

Đường liên kết mà ứng dụng của bạn sẽ mở ra. Chỉ định một URL mà ứng dụng của bạn có thể xử lý, thường là nội dung hoặc tải trọng của ứng dụng, giúp khởi tạo logic dành riêng cho ứng dụng (chẳng hạn như ghi có cho người dùng bằng phiếu giảm giá hoặc hiển thị màn hình chào mừng). Đường liên kết này phải là một URL được định dạng đúng cách, được mã hoá URL đúng cách, sử dụng HTTP hoặc HTTPS và không được là một Đường liên kết động khác.

setDomainUriPrefix Tiền tố URL Dynamic Link mà bạn có thể tìm thấy trong bảng điều khiển Firebase. Miền Dynamic Link sẽ có dạng như các ví dụ sau:
https://example.com/link
https://example.page.link
AndroidParameters
URL dự phòng Đường liên kết để mở khi người dùng chưa cài đặt ứng dụng. Chỉ định thao tác này để làm một việc gì đó ngoài việc cài đặt ứng dụng qua Cửa hàng Play khi chưa cài đặt ứng dụng, chẳng hạn như mở phiên bản nội dung trên web dành cho thiết bị di động hoặc hiển thị trang quảng cáo cho ứng dụng của bạn.
setMinimumVersion versionCode của phiên bản ứng dụng tối thiểu có thể mở đường liên kết. Nếu ứng dụng cần cài đặt là một phiên bản cũ, thì người dùng sẽ được chuyển đến Cửa hàng Play để nâng cấp.
IosParameters
setAppStoreId Mã App Store của ứng dụng, dùng để đưa người dùng đến App Store khi ứng dụng chưa được cài đặt
setFallbackUrl Đường liên kết để mở khi ứng dụng chưa được cài đặt. Chỉ định thao tác này để làm một việc gì đó ngoài việc cài đặt ứng dụng từ App Store khi chưa cài đặt ứng dụng, chẳng hạn như mở phiên bản nội dung trên web dành cho thiết bị di động hoặc hiển thị trang quảng cáo cho ứng dụng của bạn.
setCustomScheme Lược đồ URL tuỳ chỉnh của ứng dụng, nếu được xác định là một giá trị khác với mã nhận dạng gói của ứng dụng
setIpadFallbackUrl Đường liên kết để mở trên iPad khi ứng dụng chưa được cài đặt. Chỉ định hành động này để thực hiện một thao tác khác ngoài việc cài đặt ứng dụng của bạn từ App Store khi ứng dụng chưa được cài đặt, chẳng hạn như mở phiên bản web của nội dung hoặc hiển thị trang quảng bá cho ứng dụng của bạn.
setIpadBundleId Mã nhận dạng gói của ứng dụng iOS để sử dụng trên iPad nhằm mở đường liên kết. Ứng dụng phải được kết nối với dự án của bạn từ trang Tổng quan của bảng điều khiển Firebase.
setMinimumVersion Số phiên bản của phiên bản tối thiểu của ứng dụng có thể mở đường liên kết. Cờ này được truyền đến ứng dụng của bạn khi ứng dụng đó được mở và ứng dụng của bạn phải quyết định việc cần làm với cờ này.
NavigationInfoParameters
setForcedRedirectEnabled Nếu bạn đặt chính sách này thành '1', hãy bỏ qua trang xem trước ứng dụng khi Dynamic Link mở, mà chuyển hướng đến ứng dụng hoặc cửa hàng. Trang xem trước ứng dụng (được bật theo mặc định) có thể đưa người dùng đến đích đến phù hợp nhất theo cách đáng tin cậy hơn khi họ mở Dynamic Links trong ứng dụng. Tuy nhiên, nếu muốn chỉ mở Dynamic Link trong các ứng dụng có thể mở Dynamic Links một cách đáng tin cậy mà không cần trang này, thì bạn có thể tắt trang đó bằng tham số này. Tham số này sẽ chỉ ảnh hưởng đến hành vi của Dynamic Link trên iOS.
SocialMetaTagParameters
setTitle Tên để sử dụng khi Dynamic Link được chia sẻ trong một bài đăng trên mạng xã hội.
setDescription Nội dung mô tả cần sử dụng khi Dynamic Link được chia sẻ trong một bài đăng trên mạng xã hội.
setImageUrl URL đến hình ảnh liên quan đến đường liên kết này. Hình ảnh phải có kích thước tối thiểu là 300x200 pixel và kích thước dưới 300 KB.
GoogleAnalyticsParameters
setSource
setMedium
setCampaign
setTerm
setContent
Thông số phân tích của Google Play. Các thông số này (utm_source, utm_medium, utm_campaign, utm_term, utm_content) được chuyển đến Cửa hàng Play cũng như được thêm vào tải trọng của đường liên kết.
ItunesConnectAnalyticsParameters
setProviderToken
setAffiliateToken
setCampaignToken
Các thông số phân tích của iTunes Connect. Các tham số này (pt, at, ct) được truyền đến App Store.

Để rút ngắn một Dynamic Link dài, hãy chỉ định URL của Dynamic Link bằng cách sử dụng setLongLink thay vì đặt tham số bằng các phương thức trình tạo khác:

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.component1 and
    // com.google.firebase.dynamiclinks.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
                    // ...
                }
            }
        });