Nhận các liên kết động Firebase trong ứng dụng Flutter

Để nhận Liên kết động Firebase mà bạn đã tạo , bạn phải bao gồm SDK Liên kết động trong ứng dụng của mình và gọi phương thức FirebaseDynamicLinks.getDynamicLink() khi ứng dụng của bạn tải để nhận dữ liệu được truyền trong Liên kết động.

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

  2. Từ thư mục gốc của dự án Flutter của bạn, hãy chạy lệnh sau để cài đặt plugin Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. Nếu bạn đang tạo ứ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 rằng bạn đã chỉ định khóa ký SHA-1 của mình. Nếu bạn sử dụng Liên kết ứng dụng, hãy chỉ định cả khóa SHA-256 của bạn.

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 của mình.

Android

Trên Android, bạn phải thêm một bộ lọc ý định mới để bắt các liên kết sâu trong miền của bạn, vì 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. Điều này là bắt buộc để ứng dụng của bạn nhận 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. 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ở Liên kết động có liên kết sâu đến lượ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 với bộ lọc ý định này để xử lý 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 Firebase cho ứng dụng. Bạn có thể tìm thêm chi tiết về cách truy xuất dấu vân tay SHA-256 của mình trên trang Xác thực ứng dụng khách của bạn .

nền tảng của 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ủa bạn được định cấu hình chính xác với ID cửa hàng ứng dụng và ID nhóm của bạn.

  3. Trên trang web Nhà phát triển của Apple, hãy tạo hồ sơ cung cấp cho ứng dụng của bạn với khả năng Tên miền được liên kết được bật.

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

    1. Mở ứng dụng của bạn dưới tiêu đề MỤC TIÊU .

    2. Trên trang Ký kết & Khả năng, hãy đảm bảo rằng Nhóm của bạn đã được đăng ký và Hồ sơ cung cấp của bạn đã được đặt.

    3. Trên trang Ký & Khả năng, bật Miền được liên kết và thêm phần 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, thêm Loại URL vào dự án của bạn. Đặt trường Lược đồ URL thành ID gói của ứng dụng của bạn. (Mã định danh 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 miền tùy chỉnh cho dự án Firebase của mình, hãy thêm tiền tố URL của Liên kết động vào tệp Info.plist của dự án iOS bằng cách sử dụng khóa 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. Tùy chọn: Vô hiệu hóa việc 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ảng dán để cải thiện độ tin cậy của các liên kết sâu sau khi cài đặt. Bằng cách sử dụng bảng dán, Liên kết động có thể đảm bảo rằng khi người dùng mở Liên kết động 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 điều 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 có chứa URL Liên kết động, họ sẽ thấy thông báo rằng ứng dụng của bạn đã truy cập 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 của bạn và đặt khóa FirebaseDeepLinkPasteboardRetrievalEnabled thành NO .

Để xử lý Liên kết động trong ứng dụng của 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 pháp sau:

  1. FirebaseDynamicLinks.getInitialLink - trả về Future<PendingDynamicLinkData?>
  2. FirebaseDynamicLinks.onLink - trình xử lý sự kiện trả về Stream chứa Dữ liệu đang PendingDynamicLinkData?

Android sẽ luôn nhận được liên kết qua FirebaseDynamicLinks.getInitialLink từ trạng thái đã kết thúc, nhưng trên iOS, điều đó không được đảm bảo. Do đó, đáng để thiết lập cả hai theo thứ tự sau để đảm bảo ứng dụng của bạn nhận được 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 của bạn, bạn có thể kiểm tra xem một 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);
}

Bối cảnh / Trạng thái tiền cảnh

Trong khi ứng dụng đang mở hoặc ở chế độ nền, hãy sử dụng trình thu thập 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 Liên kết động chính xác có được sử dụng để mở ứng dụng hay không, hãy chuyển nó sang phương thức getDynamicLink :

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

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

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