Nhận Liên kết động của Firebase trên Android

Để nhận Firebase Dynamic Links bạn đã tạo, bạn phải đưa SDK Dynamic Links vào ứng dụng và gọi phương thức FirebaseDynamicLinks.getDynamicLink() khi ứng dụng tải để nhận dữ liệu được truyền trong Dynamic Link.

  1. Nếu bạn chưa làm việc này, 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 dùng Đường liên kết đến ứng dụng, hãy chỉ định cả khoá SHA-256.

  2. Trong tệp Gradle của mô-đun (cấp ứng dụng) (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 cho Android. Bạn nên dùng Firebase Android BoM để kiểm soát việc quản lý 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 Firebase SDK cho Google Analytics vào ứng dụng.

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

    (Giải pháp thay thế)  Thêm phần phụ thuộc của thư viện Firebase mà không dùng BoM

    Nếu chọn không 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.

    Xin lưu ý rằng nếu bạn dùng nhiều thư viện Firebase trong ứng dụng, bạn nên dùng BoM để quản lý phiên bản thư viện nhằm đảm bảo tất 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:23.2.0'
    }
  3. Trong bảng điều khiển Firebase, hãy mở phần Dynamic Links. Chấp nhận điều khoản dịch vụ nếu bạn được nhắc làm việc này.

Giống như đường liên kết sâu thông thường, bạn phải thêm một bộ lọc ý định mới vào hoạt động xử lý đường liên kết sâu cho ứng dụng. Bộ lọc ý định này sẽ nắm bắt các đường liên kết sâu của miền, vì Dynamic Link sẽ chuyển hướng đến miền của bạn nếu ứng dụng được cài đặt. Bạn phải làm việc này để ứng dụng nhận được dữ liệu Dynamic Link sau khi được cài đặt/cập nhật từ Cửa hàng Play và người dùng nhấn vào nút Tiếp tục. Trong AndroidManifest.xml:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

Khi người dùng mở Dynamic Link bằng đường liên kết sâu đến lược đồ và máy chủ mà bạn chỉ định, ứng dụng sẽ bắt đầu hoạt động bằng bộ lọc ý định này để xử lý đường liên kết.

Để nhận đường liên kết sâu, hãy gọi phương thức getDynamicLink():

Kotlin

Firebase.dynamicLinks
    .getDynamicLink(intent)
    .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? ->
        // Get deep link from result (may be null if no link is found)
        var deepLink: Uri? = null
        if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.link
        }

        // Handle the deep link. For example, open the linked
        // content, or apply promotional credit to the user's
        // account.
        // ...
    }
    .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                // Get deep link from result (may be null if no link is found)
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();
                }


                // Handle the deep link. For example, open the linked
                // content, or apply promotional credit to the user's
                // account.
                // ...

                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "getDynamicLink:onFailure", e);
            }
        });

Bạn phải gọi getDynamicLink() trong mọi Hoạt động có thể được đường liên kết khởi chạy, ngay cả khi đường liên kết đó có thể có trong ý định bằng cách dùng getIntent().getData(). Khi gọi getDynamicLink(), đường liên kết sẽ truy xuất và xoá dữ liệu đó để ứng dụng chỉ xử lý một lần.

Bạn thường gọi getDynamicLink() trong hoạt động chính cũng như mọi hoạt động được khởi chạy bằng bộ lọc ý định phù hợp với đường liên kết.

Ghi lại dữ liệu phân tích

Bạn có thể tự động theo dõi các sự kiện sau đây trong Google Analytics và xem trong bảng điều khiển Firebase.

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

Để đăng ký các sự kiện này, bạn cần định cấu hình Google Analytics trước khi bạn truy xuất đường liên kết sâu. Hãy kiểm tra để đảm bảo các điều kiện sau đây được đáp ứng:

  • Gọi FirebaseDynamicLinks.getDynamicLink() tại các điểm truy cập vào ứng dụng:
    • Hoạt động của trình chạy. Ví dụ: action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER".
    • Điểm truy cập vào hoạt động. Ví dụ: onStart(), onCreate().
    • Hoạt động của đường liên kết sâu.
  • Thiết lập và sử dụng Google Analytics:
    • Thêm phần phụ thuộc Google Analytics. Thường thì trình bổ trợ Gradle google-services sẽ tự động thêm phần phụ thuộc này.
    • Thêm tệp cấu hình google-services.json vào ứng dụng.
    • Gọi FirebaseAnalytics.getInstance() trước khi gọi FirebaseDynamicLinks.getDynamicLink().

Trên Android 6.0 (cấp độ API 23) trở lên, bạn có thể thiết lập ứng dụng để xử lý Dynamic Links trực tiếp khi ứng dụng đã được cài đặt bằng cách dùng Đường liên kết trong ứng dụng Android.

Đảm bảo bạn đã thêm dấu vân tay chứng chỉ SHA256 cho ứng dụng vào dự án trong bảng điều khiển Firebase. Dynamic Links sẽ xử lý việc thiết lập mối liên kết trang web của Đường liên kết đến ứng dụng cho miền Dynamic Links của bạn.

Thêm bộ lọc ý định được tự động xác minh vào Hoạt động sẽ xử lý Dynamic Link, thiết lập máy chủ thành miền Dynamic Links của dự án như trong bảng điều khiển Firebase. Trong AndroidManifest.xml:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:host="example.com/link" android:scheme="http"/>
    <data android:host="example.com/link" android:scheme="https"/>
</intent-filter>

Xin lưu ý rằng bạn phải thiết lập android:host thành miền Dynamic Links chứ không phải miền của đường liên kết sâu.

Bạn phải đăng ký tất cả bộ lọc ý định autoVerify trong tệp kê khai để Đường liên kết đến ứng dụng hoạt động. Firebase sẽ tự động xử lý việc này cho các miền Dynamic Links, nhưng bạn có thể kiểm tra bằng cách mở tệp assetlinks.json được lưu trữ trên miền Dynamic Links:

https://YOUR_DOMAIN/.well-known/assetlinks.json
Bạn phải thêm tên gói của tất cả ứng dụng Firebase.

Dynamic Links sẽ được gửi trực tiếp đến ứng dụng của bạn. Bạn có thể nhận đường liên kết sâu và các dữ liệu khác của Dynamic Link bằng cách gọi getDynamicLink() trong Hoạt động mà bạn đã thêm bộ lọc ý định Đường liên kết đến ứng dụng (như mô tả trong phần Xử lý đường liên kết sâu).

Lưu ý: Vì việc gọi thông qua Đường liên kết đến ứng dụng sẽ đưa người dùng trực tiếp đến ứng dụng, nên một Đường liên kết động không thể tuân thủ phiên bản tối thiểu bắt buộc. Vì vậy, sau khi mở ứng dụng, bạn cần so sánh phiên bản tối thiểu của Đường liên kết động ( getminimumappversion) với PackageInfo.versionCode và chuyển hướng người dùng nâng cấp ứng dụng nếu cần bằng cách dùng getUpdateAppIntent.