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

Để nhận được Liên kết động Firebase mà bạn đã tạo , bạn phải đưa SDK Liên kết động vào ứ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 chuyển trong 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 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 xây dựng 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 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 khóa SHA-256 của bạn.

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 cho 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 bộ lọc ý định mới để bắt các liên kết sâu trong miền của mình 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 được dữ liệu Liên kết động sau khi được cài đặt/cập nhật từ Cửa hàng Play và nhấn một lầ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ủ 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 thông tin chi tiết về cách lấy 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 App Store và ID nhóm của bạn.

  3. Trên trang web Nhà phát triển Apple, hãy tạo hồ sơ cấp phép cho ứng dụng của bạn với khả năng Miền 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 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ý kết & Khả năng, bật Miền liên kết và thêm thông tin 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, 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 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 liên kết sâu sau 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ể truy cập ngay vào 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 dán sẽ kích hoạt thông báo trên iOS 14 trở lên. Vì vậy, trong lần đầu tiên người dùng mở ứng dụng của bạn, nếu bảng điều khiển 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 vào bảng điều khiể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 kịch bản.

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 PendingDynamicLinkData?

Android sẽ luôn nhận được liên kết qua FirebaseDynamicLinks.getInitialLink từ trạng thái chấm dứt nhưng trên iOS, điều đó 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 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 mình, 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);
}

Nền/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 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 Liên kết động chính xác có được sử dụng để mở ứng dụng hay không, thay vào đó 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 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 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 đã bị chấm dứt (tức là ứng dụng đã bị đóng.).