หากต้องการรับลิงก์แบบไดนามิกของ Firebase ที่คุณสร้าง คุณต้องรวม SDK ลิงก์แบบไดนามิกไว้ในแอปและเรียกใช้เมธอด FirebaseDynamicLinks.getDynamicLink()
เมื่อแอปโหลดเพื่อรับข้อมูลที่ส่งในลิงก์แบบไดนามิก
ตั้งค่า Firebase และ Dynamic Links SDK
ติดตั้งและเริ่มต้น Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ
เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินลิงก์แบบไดนามิกจากไดเรกทอรีรูทของโปรเจ็กต์ Flutter
flutter pub add firebase_dynamic_links
หากคุณกำลังสร้างแอป Android ให้เปิดหน้าการตั้งค่าโปรเจ็กต์ของคอนโซล Firebase และตรวจสอบว่าได้ระบุคีย์การลงนาม SHA-1 แล้ว หากคุณใช้ App Link ให้ระบุคีย์ SHA-256 ด้วย
การผสานรวมแพลตฟอร์ม
ทำตามขั้นตอนการผสานรวมแพลตฟอร์มต่อไปนี้สำหรับแพลตฟอร์มที่คุณกำลังสร้างแอป
Android
ใน Android คุณต้องเพิ่มตัวกรอง Intent ใหม่ที่ตรวจจับ Deep Link ของโดเมน เนื่องจากลิงก์แบบไดนามิกจะเปลี่ยนเส้นทางไปยังโดเมนของคุณหากมีการติดตั้งแอปไว้ ซึ่งจำเป็นสำหรับแอปที่จะรับข้อมูลลิงก์แบบไดนามิกหลังจากติดตั้ง/อัปเดตแอปจาก Play Store และแตะปุ่มต่อไปเพียงครั้งเดียว ใน 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>
เมื่อผู้ใช้เปิดลิงก์แบบไดนามิกที่มี Deep Link ไปยังสคีมและโฮสต์ที่คุณระบุ แอปจะเริ่มกิจกรรมด้วยตัวกรอง Intent นี้เพื่อจัดการลิงก์
ขั้นตอนถัดไปคือการตรวจสอบว่าได้ลงทะเบียนลายนิ้วมือ SHA-256 ของใบรับรองที่ลงนามในคอนโซล Firebase สำหรับแอปแล้ว คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีดึงข้อมูลลายนิ้วมือ SHA-256 ได้ในหน้าการตรวจสอบสิทธิ์ไคลเอ็นต์
แพลตฟอร์ม Apple
สร้างบัญชีนักพัฒนาแอป Apple หากยังไม่มี
ในหน้าการตั้งค่าโปรเจ็กต์ของคอนโซล Firebase โปรดตรวจสอบว่าคุณได้กำหนดค่าแอป iOS ด้วยรหัส App Store และรหัสทีมอย่างถูกต้อง
ในเว็บไซต์ Apple Developer ให้สร้างโปรไฟล์การจัดสรรสำหรับแอปโดยเปิดใช้ความสามารถของ Associated Domain
ใน Xcode ให้ทำดังนี้
เปิดแอปภายใต้ส่วนหัว TARGETS
ในหน้าการลงชื่อและความสามารถ ให้ตรวจสอบว่าคุณลงทะเบียนทีมและตั้งค่าโปรไฟล์การจัดสรรแล้ว
ในหน้า Signing &ความสามารถ ให้เปิดใช้โดเมนที่เชื่อมโยง แล้วเพิ่มสิ่งต่อไปนี้ลงในรายการโดเมนที่เชื่อมโยง (แทนที่ตัวอย่างด้วยโดเมนของคุณ)
applinks:example.page.link
ในหน้าข้อมูล ให้เพิ่มประเภท URL ลงในโครงการ ตั้งค่าช่องรูปแบบ URL เป็นรหัสชุดของแอป (ตัวระบุอาจเป็น
Bundle ID
หรืออะไรก็ได้)หากคุณได้ตั้งค่าโดเมนที่กำหนดเองสำหรับโปรเจ็กต์ 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>
ไม่บังคับ: ปิดใช้เพสบอร์ด iOS ของ Dynamic Link SDK
โดยค่าเริ่มต้นแล้ว Dynamic Link SDK จะใช้เพสบอร์ดเพื่อปรับปรุงความน่าเชื่อถือของ Deep Link หลังการติดตั้ง การใช้เพสบอร์ดจะทำให้ลิงก์แบบไดนามิกช่วยให้มั่นใจว่าเมื่อผู้ใช้เปิดลิงก์แบบไดนามิกแต่ต้องการติดตั้งแอปของคุณก่อน ผู้ใช้จะสามารถไปยังเนื้อหาเดิมที่ลิงก์ได้ทันทีเมื่อเปิดแอปเป็นครั้งแรกหลังการติดตั้ง
ข้อเสียของวิธีนี้คือการใช้เพสบอร์ดจะทริกเกอร์การแจ้งเตือนบน iOS 14 ขึ้นไป ดังนั้น ครั้งแรกที่ผู้ใช้เปิดแอปหากเพสบอร์ดมี URL ลิงก์แบบไดนามิก ผู้ใช้จะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึง Pasteboard ซึ่งอาจทำให้เกิดความสับสน
หากต้องการปิดใช้การทำงานนี้ ให้แก้ไขไฟล์
Info.plist
ของโปรเจ็กต์ Xcode และตั้งค่าคีย์FirebaseDeepLinkPasteboardRetrievalEnabled
เป็นNO
จัดการ Deep Link
ในการจัดการลิงก์แบบไดนามิกในแอปพลิเคชันของคุณ จะต้องมีการใช้งาน 2 สถานการณ์นี้
สถานะสิ้นสุดการใช้งาน
ตั้งค่าวิธีการต่อไปนี้
FirebaseDynamicLinks.getInitialLink
- แสดงผลFuture<PendingDynamicLinkData?>
FirebaseDynamicLinks.onLink
- เครื่องจัดการเหตุการณ์ที่ส่งคืนStream
ที่มีPendingDynamicLinkData?
Android จะได้รับลิงก์ผ่าน FirebaseDynamicLinks.getInitialLink
จากสถานะสิ้นสุดเสมอ
แต่จะไม่มีการรับประกันใน iOS ดังนั้นคุณจึงควรตั้งค่าทั้ง 2 แพลตฟอร์มตามลำดับต่อไปนี้เพื่อให้แอปพลิเคชันได้รับลิงก์
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));
}
ภายในตรรกะของแอปพลิเคชัน คุณจะสามารถตรวจสอบว่ามีการจัดการลิงก์และดำเนินการบางอย่างหรือไม่ เช่น
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.onLink
:
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
หรือหากต้องการทราบว่ามีการใช้ลิงก์แบบไดนามิกที่เจาะจงในการเปิดแอปพลิเคชันหรือไม่ ให้ส่งลิงก์ดังกล่าวไปยังเมธอด getDynamicLink
แทน ดังนี้
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
การทดสอบลิงก์แบบไดนามิกบนแพลตฟอร์ม iOS
หากต้องการทดสอบลิงก์แบบไดนามิกใน iOS คุณจะต้องใช้อุปกรณ์จริง นอกจากนี้คุณจะต้องเรียกใช้แอปในโหมดเผยแพร่ (เช่น flutter run --release
)
หากทดสอบลิงก์แบบไดนามิกจากสถานะแอปที่สิ้นสุด (เช่น มีการปัดแอปปิดแล้ว)