รับ Firebase Dynamic Links ในแอป Flutter

ในการรับ Firebase Dynamic Links ที่ คุณสร้างขึ้น คุณต้องรวม Dynamic Links SDK ในแอปของคุณและเรียกเมธอด FirebaseDynamicLinks.getDynamicLink() เมื่อแอปโหลดเพื่อรับข้อมูลที่ส่งผ่านใน Dynamic Link

  1. ติดตั้งและเริ่มต้น Firebase SDK สำหรับ Flutter หากคุณยังไม่ได้ดำเนินการ

  2. จากไดเร็กทอรีรากของโปรเจ็กต์ Flutter ให้รันคำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอิน Dynamic Links:

    flutter pub add firebase_dynamic_links
    
  3. หากคุณกำลังสร้างแอป Android ให้เปิดหน้า การตั้งค่าโปรเจ็ กต์ของคอนโซล Firebase และตรวจสอบว่าคุณได้ระบุคีย์การลงนาม SHA-1 แล้ว หากคุณใช้ลิงก์แอป ให้ระบุคีย์ SHA-256 ด้วย

การรวมแพลตฟอร์ม

ทำตามขั้นตอนการรวมแพลตฟอร์มต่อไปนี้สำหรับแพลตฟอร์มที่คุณกำลังสร้างแอปของคุณ

Android

ใน Android คุณต้องเพิ่มตัวกรอง Intent ใหม่เพื่อดักจับ Deep Link ของโดเมนของคุณ เนื่องจาก Dynamic Link จะเปลี่ยนเส้นทางไปยังโดเมนของคุณหากแอปของคุณได้รับการติดตั้ง สิ่งนี้จำเป็นสำหรับแอปของคุณในการรับข้อมูล Dynamic Link หลังจากติดตั้ง/อัปเดตจาก Play Store และแตะหนึ่งครั้งที่ปุ่ม Continue ใน 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>

เมื่อผู้ใช้เปิดลิงก์แบบไดนามิกที่มีลิงก์ในรายละเอียดไปยังชุดรูปแบบและโฮสต์ที่คุณระบุ แอปของคุณจะเริ่มกิจกรรมด้วยตัวกรองความตั้งใจนี้เพื่อจัดการลิงก์

แพลตฟอร์ม Apple

  1. สร้างบัญชีนักพัฒนา Apple หากคุณยังไม่มี

  2. ในหน้า การตั้งค่าโปรเจ็ กต์ของคอนโซล Firebase ให้ตรวจสอบว่าแอป iOS ของคุณได้รับการกำหนดค่าอย่างถูกต้องด้วย App Store ID และ Team ID

  3. บนไซต์นักพัฒนาของ Apple ให้สร้างโปรไฟล์การจัดเตรียมสำหรับแอปของคุณโดยเปิดใช้งานความสามารถในการเชื่อมโยงโดเมน

  4. ใน Xcode ให้ทำดังต่อไปนี้:

    1. เปิดแอปของคุณภาย ใต้ หัวข้อเป้าหมาย

    2. ในหน้า Signing & Capabilities ตรวจสอบให้แน่ใจว่าทีมของคุณลงทะเบียนแล้ว และตั้งค่า Provisioning Profile ของคุณ

    3. เพิ่มโดเมนที่คุณสร้างในคอนโซล Firebase ไปยังโดเมนที่เกี่ยวข้อง โดยนำหน้าด้วย applinks: (เช่น applinks:example.page.link )

    4. ในหน้าข้อมูล ให้เพิ่มประเภท URL ให้กับโครงการของคุณ ตั้งค่าฟิลด์ URL Schemes เป็น Bundle ID ของแอปของคุณ (ตัวระบุสามารถเป็น Bundle ID หรืออะไรก็ได้ที่คุณต้องการ)

    5. หากคุณได้ตั้งค่าโดเมนที่กำหนดเองสำหรับโปรเจ็กต์ Firebase ของคุณ ให้เพิ่มคำนำหน้า URL ลิงก์แบบไดนามิกลงในไฟล์ Info.plist ของโปรเจ็กต์ iOS โดยใช้คีย์ 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. ไม่บังคับ: ปิดใช้งานการใช้ Pasteboard iOS ของ Dynamic Links SDK

      โดยค่าเริ่มต้น Dynamic Links SDK จะใช้แผ่นแปะเพื่อปรับปรุงความน่าเชื่อถือของลิงก์ในรายละเอียดหลังการติดตั้ง เมื่อใช้ Pasteboard จะทำให้ Dynamic Links มั่นใจได้ว่าเมื่อผู้ใช้เปิด Dynamic Link แต่จำเป็นต้องติดตั้งแอปของคุณก่อน ผู้ใช้สามารถไปที่เนื้อหาที่ลิงก์เดิมได้ทันทีเมื่อเปิดแอปเป็นครั้งแรกหลังการติดตั้ง

      ข้อเสียคือการใช้แผ่นแปะจะทริกเกอร์การแจ้งเตือนใน iOS 14 และใหม่กว่า ดังนั้น ในครั้งแรกที่ผู้ใช้เปิดแอปของคุณ หากแผ่นแปะมี URL ลิงก์แบบไดนามิก พวกเขาจะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงแผ่นแปะ ซึ่งอาจทำให้เกิดความสับสน

      หากต้องการปิดการทำงานนี้ ให้แก้ไขไฟล์ Info.plist ของโปรเจ็กต์ Xcode และตั้งค่าคีย์ FirebaseDeepLinkPasteboardRetrievalEnabled เป็น NO

ในการจัดการลิงก์แบบไดนามิกในแอปพลิเคชันของคุณ ต้องมีการติดตั้งใช้งานสองสถานการณ์

สถานะสิ้นสุด

หากแอปพลิเคชันถูกยกเลิก วิธี FirebaseDynamicLinks.getInitialLink จะช่วยให้คุณสามารถดึงข้อมูล Dynamic Link ที่เปิดแอปพลิเคชันได้

นี่เป็นคำขอแบบอะซิงโครนัส ดังนั้นจึงควรจัดการกับลิงก์ก่อนที่จะแสดงผลตรรกะของแอปพลิเคชัน เช่น ตัวนำทาง ตัวอย่างเช่น คุณสามารถจัดการสิ่งนี้ในฟังก์ชัน main :

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

  // Get any initial links
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  runApp(MyApp(initialLink));
}

ภายในตรรกะของแอปพลิเคชันของคุณ คุณสามารถตรวจสอบว่าลิงก์ได้รับการจัดการและดำเนินการใดๆ หรือไม่ ตัวอย่างเช่น:

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);
}

หรือหากคุณต้องการระบุว่ามีการใช้ Dynamic Link ในการเปิดแอปพลิเคชันหรือไม่ ให้ส่งต่อไปยังเมธอด getDynamicLink แทน:

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

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

พื้นหลัง / สถานะเบื้องหน้า

ขณะที่แอปพลิเคชันเปิดอยู่หรืออยู่ในพื้นหลัง คุณอาจฟังเหตุการณ์ลิงก์แบบไดนามิกโดยใช้ตัวจัดการสตรีม ตัวรับ FirebaseDynamicLinks.onLink ส่งคืน Stream ที่มี PendingDynamicLinkData :

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