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

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

    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 Liên kết trong ứ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 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 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 Đườ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 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 Firebase cho ứng dụng. Bạn có thể tìm thêm thông tin về cách truy xuất vân tay số SHA-256 trên trang Xác thực ứng dụng khách.

Nền tảng của Apple

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

  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ủa bạn đượ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 Apple Developer, hãy tạo một hồ sơ cung cấp cho ứng dụng của bạn khi đã bật chức năng Miền được liên kết.

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

    1. Mở ứng dụng của bạn trong tiêu đề TARGETS (MỤC TIÊU).

    2. Trên trang Signing & Capabilities (Ký và chức năng), hãy đảm bảo Nhóm của bạn đã được đăng ký và bạn đã thiết lập Provisioning Profile (Hồ sơ cung cấp).

    3. Trên trang Ký và khả năng, hãy bật Associated Domains (Miền được liên kết) và thêm nội dung sau vào danh sách Miền được 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 một Loại URL vào dự án của bạn. Đặt trường URL Schemes (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 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 tính năng sử dụng bảng tạm iOS của SDK Đường liên kết động.

      Theo mặc định, Dynamic Links SDK sử dụng bảng tạm để cải thiện độ tin cậy của liên kết sâu sau khi cài đặt. Bằng cách sử dụng bảng tạm, Dynamic Links có thể đảm bảo rằng khi người dùng mở một Dynamic Link nhưng cần cài đặt ứng dụng của bạn 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 một thông báo trên iOS 14 trở lên. Vì vậy, vào 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 một URL Đường liên kết động, thì 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 đã chấm dứt

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 một 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 chắc chắn. Do đó, bạn nên thiết lập cả hai theo thứ tự sau để đảm bảo ứng dụng của bạn 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, sau đó 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 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 FirebaseDynamicLinks.onLinkgetter:

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 có phải một Đường liên kết động chính xác đã được dùng để mở ứng dụng hay không, hãy truyền đường liên kết đó đến 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ị đóng bằng cách vuốt).