Nhận Liên kết động của Firebase trong ứng dụng Flutter

Để nhận được Đường liên kết động của Firebase mà bạn đã tạo, bạn phải đưa SDK liên kết động 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 chuyển vào Đường liên kết động.

  1. Cài đặt và khởi chạy Firebase SDK cho Flutter nếu bạn chưa thực hiện việc này.

  2. Từ thư mục gốc của dự án Flutter, hãy chạy lệnh sau để cài đặt trình bổ trợ Đường liên kết động:

    flutter pub add firebase_dynamic_links
    
  3. Nếu bạn đang tạo một ứng dụng Android, hãy mở trang Cài đặt dự án trong bảng điều khiển của Firebase và đảm bảo bạn đã chỉ định khoá ký SHA-1. Nếu bạn sử dụng Đường liên kết đến ứng dụng, hãy chỉ định cả khoá SHA-256.

Tích hợp nền tảng

Hoàn thành các bước tích hợp nền tảng sau cho các nền tảng mà bạn đang xây dựng ứng dụng.

Android

Trên Android, bạn phải thêm một bộ lọc ý định mới để nắm bắt các đường liên kết sâu của miền, vì Đường liên kết động sẽ chuyển hướng đến miền của bạn nếu ứng dụng của bạn đã được cài đặt. Đây là yêu cầu bắt buộc để ứng dụng của bạn nhận được dữ liệu Liên kết động sau khi ứng dụng được cài đặt/cập nhật từ Cửa hàng Play và một lần nhấn vào nút Tiếp tục. Sau 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ở một Đường liên kết động có đường liên kết sâu đến giao thức và máy chủ lưu trữ mà bạn chỉ định, ứng dụng của bạn sẽ bắt đầu hoạt động bằng bộ lọc ý định này để xử lý đường liên kết.

Bước tiếp theo là đảm bảo vân tay số SHA-256 của chứng chỉ ký đã được đăng ký trong bảng điều khiển của Firebase cho ứng dụng. Bạn có thể xem thêm thông tin chi tiết về cách truy xuất vân tay số SHA-256 trên trang Xác thực ứng dụng của bạn.

Nền tảng của Apple

  1. Tạo tài khoản nhà phát triển của Apple nếu bạn chưa có tài khoản này.

  2. Trên trang Cài đặt dự án của bảng điều khiển của Firebase, hãy đảm bảo rằng ứng dụng iOS của bạn được định cấu hình chính xác với Mã App Store và Mã nhóm của bạn.

  3. Trên trang web dành cho nhà phát triển của Apple, hãy tạo hồ sơ cấp phép cho ứng dụng của bạn khi bật tính năng Miền được liên kết.

  4. Trong Xcode, hãy làm như sau:

    1. Mở ứng dụng trong tiêu đề MỤC TIÊU.

    2. Trên trang Ký và chức năng, hãy đảm bảo rằng Nhóm của bạn đã được đăng ký và thiết lập Hồ sơ cấp phép.

    3. Trên trang Ký và chức năng, hãy bật Miền được liên kết rồi thêm đoạn mã sau vào danh sách Miền đã liên kết (thay thế ví dụ bằng miền của bạn):

      applinks:example.page.link
      
    4. Trên trang Thông tin, hãy thêm Loại URL vào dự án. Đặt trường Lược đồ URL thành mã nhận dạng gói của ứng dụng. (Giá trị nhận dạng có thể là Bundle ID hoặc bất kỳ giá trị nào bạn muốn.)

    5. Nếu bạn đã thiết lập một miền tuỳ chỉnh cho dự án Firebase, hãy thêm tiền tố URL đường liên kết động vào tệp Info.plist của dự án iOS bằng cách sử dụng khoá FirebaseDynamicLinksCustomDomains.

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
      <key>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. Không bắt buộc: Không cho phép SDK sử dụng bảng dán iOS của SDK liên kết động.

      Theo mặc định, SDK liên kết động sử dụng bản dán để cải thiện độ tin cậy của các đường liên kết sâu sau khi cài đặt. Bằng cách sử dụng bảng dán, Đường liên kết động có thể đảm bảo rằng khi người dùng mở Đường liên kết động nhưng cần cài đặt ứng dụng trước, họ có thể chuyển ngay đến nội dung ban đầu được liên kết trong lần đầu mở ứng dụng sau khi cài đặt.

      Nhược điểm của tính năng này là việc sử dụng bảng dán sẽ kích hoạt thông báo trên iOS 14 trở lên. Vì vậy, lần đầu tiên người dùng mở ứng dụng của bạn, nếu bảng dán chứa URL đường liên kết động, họ sẽ thấy một thông báo cho biết ứng dụng đã truy cập vào bảng dán, điều này có thể gây nhầm lẫn.

      Để tắt hành vi này, hãy chỉnh sửa tệp Info.plist của dự án Xcode và đặt khoá FirebaseDeepLinkPasteboardRetrievalEnabled thành NO.

Để xử lý Đường liên kết động trong ứng dụng, bạn cần triển khai hai tình huống.

Trạng thái chấm dứt

Thiết lập các phương thức sau:

  1. FirebaseDynamicLinks.getInitialLink – trả về một Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink – trình xử lý sự kiện trả về Stream chứa PendingDynamicLinkData?

Android sẽ luôn nhận được đường liên kết qua FirebaseDynamicLinks.getInitialLink từ trạng thái đã kết thúc, nhưng trên iOS, điều này không được đảm bảo. Do đó, bạn nên thiết lập cả hai theo thứ tự sau để đảm bảo ứng dụng nhận được đường liên kết:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Check if you received the link via `getInitialLink` first
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  if (initialLink != null) {
    final Uri deepLink = initialLink.link;
    // Example of using the dynamic link to push the user to a different screen
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink.listen(
        (pendingDynamicLinkData) {
          // Set up the `onLink` event listener next as it may be received here
          if (pendingDynamicLinkData != null) {
            final Uri deepLink = pendingDynamicLinkData.link;
            // Example of using the dynamic link to push the user to a different screen
            Navigator.pushNamed(context, deepLink.path);
          }
        },
      );

  runApp(MyApp(initialLink));
}

Trong logic ứng dụng, bạn có thể kiểm tra xem một đường liên kết có được xử lý hay không và thực hiện một thao tác, ví dụ:

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

Trạng thái nền trước / nền trước

Khi ứng dụng đang mở hoặc chạy ở chế độ nền, hãy dùng phương thức getter FirebaseDynamicLinks.onLink:

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

Ngoài ra, nếu bạn muốn xác định xem một Đường liên kết động chính xác có được dùng để mở ứng dụng hay không, hãy chuyển đường liên kết đó vào phương thức getDynamicLink:

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

Để thử nghiệm đường liên kết động trên iOS, bạn phải sử dụng thiết bị thực tế. Bạn cũng cần chạy ứng dụng ở chế độ phát hành (tức là flutter run --release), nếu kiểm thử một đường liên kết động từ trạng thái ứng dụng đã kết thúc (tức là ứng dụng đã đóng).