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

Để nhận Đườ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 truyền trong Đường liên kết động.

  1. Cài đặt và khởi chạy SDK Firebase cho Flutter nếu bạn chưa làm.

  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 của bảng điều khiển 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 ứng dụng, hãy chỉ định cả khoá SHA-256.

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

Hoàn tất các bước tích hợp nền tảng sau đây cho những nền tảng mà bạn đang tạo ứ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 cài đặt. Bạn phải làm việc này để ứng dụng nhận được dữ liệu Đường liên kết động 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ở một Đường liên kết động có đườ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.

Bước tiếp theo là đảm bảo dấu vân tay 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 dấu vân tay SHA-256 trên trang Xác thực ứng dụng.

Nền tảng Apple

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

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

  3. Trên trang web của Nhà phát triển Apple, hãy tạo hồ sơ cung cấ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 đề TARGETS.

    2. Trên trang Ký và chức năng, hãy đảm bảo Nhóm của bạn đã được đăng ký và Hồ sơ cung cấp đã được thiết lậ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 nội dung sau vào danh sách Miền được liên kết (thay 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 một Loại URL vào dự án của bạ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 cứ thứ gì 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 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: Tắt việc sử dụng bảng tạm của iOS trong SDK Đường liên kết động.

      Theo mặc định, SDK Đường liên kết động sử dụng bảng tạm để 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 tạm, Đường liên kết động có thể đảm bảo rằng khi người dùng mở một Đường liên kết động nhưng cần cài đặt ứng dụng trước, người dùng có thể chuyển ngay đến nội dung được liên kết ban đầu khi mở ứng dụng lần đầu tiên sau khi cài đặt.

      Nhược điểm của việc này là việc sử dụng bảng tạm 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 tạm 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 của bạn đã truy cập vào bảng tạm, đ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ý một Đường liên kết động trong ứng dụng, bạn cần triển khai 2 trường hợp.

Trạng thái đã kết thúc

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

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

Android sẽ luôn nhận được đường liên kết thông qua FirebaseDynamicLinks.getInitialLink từ trạng thái đã kết thúc, nhưng trên iOS thì 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 của ứng dụng, sau đó bạn có thể kiểm tra xem một đường liên kết đã được xử lý hay chưa và thực hiện một hành động, 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 / nền trước

Trong khi ứng dụng đang mở hoặc ở chế độ nền, hãy sử 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 truyề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));

Để kiểm thử một đường liên kết động trên iOS, bạn phải sử dụng một thiết bị thực. 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 đã bị vuốt để đóng).