หากต้องการรับลิงก์แบบไดนามิกของ Firebase ที่คุณสร้าง
คุณต้องรวม Dynamic Links SDK ไว้ในแอปและเรียกใช้เมธอด
FirebaseDynamicLinks.getDynamicLink()
เมื่อแอปโหลดเพื่อ
รับข้อมูลที่ส่งในลิงก์แบบไดนามิก
ตั้งค่า Firebase และ SDK ลิงก์แบบไดนามิก
ติดตั้งและเริ่มต้นใช้งาน Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ
จากไดเรกทอรีรากของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอิน Dynamic Links
flutter pub add firebase_dynamic_links
หากคุณกำลังสร้างแอป Android ให้เปิดหน้าการตั้งค่าโปรเจ็กต์ ของคอนโซล Firebase และตรวจสอบว่าคุณได้ระบุคีย์การลงนาม SHA-1 แล้ว หากใช้ App Link ให้ระบุคีย์ SHA-256 ด้วย
การผสานรวมแพลตฟอร์ม
ทําตามขั้นตอนการผสานรวมแพลตฟอร์มต่อไปนี้สําหรับแพลตฟอร์มที่คุณใช้สร้างแอป
Android
ใน Android คุณต้องเพิ่มตัวกรอง Intent ใหม่เพื่อจับ Deep Link ของโดเมน เนื่องจาก Dynamic 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 Console สำหรับแอปแล้ว คุณดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีดึงลายนิ้วมือ SHA-256 ได้ในหน้า การตรวจสอบสิทธิ์ไคลเอ็นต์
แพลตฟอร์มของ Apple
สร้างบัญชีนักพัฒนาแอป Apple หากยังไม่มี
ในหน้าการตั้งค่าโปรเจ็กต์ ของคอนโซล Firebase ให้ตรวจสอบว่าแอป iOS ได้รับการกำหนดค่าอย่างถูกต้อง ด้วยรหัส App Store และรหัสทีม
สร้างโปรไฟล์การจัดสรรสำหรับแอปของคุณในเว็บไซต์นักพัฒนาแอปของ Apple โดยเปิดใช้ความสามารถของโดเมนที่เชื่อมโยง
ใน Xcode ให้ทำดังนี้
เปิดแอปในส่วนหัวเป้าหมาย
ในหน้าการลงนามและความสามารถ ให้ตรวจสอบว่าได้ลงทะเบียนทีมและตั้งค่าโปรไฟล์การจัดสรรแล้ว
ในหน้าการลงนามและความสามารถ ให้เปิดใช้โดเมนที่เชื่อมโยงและ เพิ่มรายการต่อไปนี้ลงในรายการโดเมนที่เชื่อมโยง (แทนที่ example ด้วยโดเมนของคุณ)
applinks:example.page.link
ในหน้าข้อมูล ให้เพิ่มประเภท URL ลงในโปรเจ็กต์ ตั้งค่าฟิลด์ URL Schemes เป็นรหัสแพ็กเกจของแอป (ตัวระบุอาจเป็น
Bundle ID
หรือ อะไรก็ได้ตามต้องการ)หากตั้งค่าโดเมนที่กําหนดเองสําหรับโปรเจ็กต์ Firebase ให้เพิ่ม คํานําหน้า URL ของ Dynamic Link ลงในไฟล์
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 Links SDK
โดยค่าเริ่มต้น Dynamic Links SDK จะใช้กระดานวางเพื่อปรับปรุง ความน่าเชื่อถือของ Deep Link หลังการติดตั้ง การใช้กระดานวางข้อความช่วยให้ลิงก์แบบไดนามิกมั่นใจได้ว่าเมื่อผู้ใช้เปิดลิงก์แบบไดนามิกแต่ต้องติดตั้งแอปก่อน ผู้ใช้จะไปยังเนื้อหาที่ลิงก์เดิมได้ทันทีเมื่อเปิดแอปเป็นครั้งแรกหลังการติดตั้ง
ข้อเสียของวิธีนี้คือการใช้เพจจะทริกเกอร์ การแจ้งเตือนใน iOS 14 ขึ้นไป ดังนั้น ครั้งแรกที่ผู้ใช้เปิดแอป หากเพจบอร์ดมี URL ของ Dynamic Link ผู้ใช้จะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงเพจบอร์ด ซึ่งอาจทำให้เกิดความสับสน
หากต้องการปิดใช้ลักษณะการทำงานนี้ ให้แก้ไขไฟล์
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
});
หรือหากต้องการระบุว่ามีการใช้ Dynamic Link ที่ตรงกันทุกประการเพื่อเปิดแอปพลิเคชันหรือไม่ ให้ส่งไปยังเมธอด getDynamicLink
แทน
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
การทดสอบ Dynamic Link บนแพลตฟอร์ม iOS
หากต้องการทดสอบลิงก์แบบไดนามิกใน iOS คุณต้องใช้อุปกรณ์จริง นอกจากนี้ คุณยังต้องเรียกใช้แอปในโหมดรีลีส (เช่น flutter run --release
.)
หากทดสอบลิงก์แบบไดนามิกจากสถานะแอปที่สิ้นสุดแล้ว (เช่น ปิดแอปด้วยการปัด)