หากต้องการรับลิงก์แบบไดนามิกของ Firebase ที่คุณสร้าง
คุณต้องรวม Dynamic Links SDK ไว้ในแอปและเรียกใช้เมธอด
FirebaseDynamicLinks.getDynamicLink() เมื่อแอปโหลดเพื่อ
รับข้อมูลที่ส่งในลิงก์แบบไดนามิก
ตั้งค่า Firebase และ SDK ลิงก์แบบไดนามิก
ติดตั้งและเริ่มต้นใช้งาน Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ
จากไดเรกทอรีรากของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินลิงก์แบบไดนามิก
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 สำหรับแอปแล้ว คุณดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีดึงฟิงเกอร์ปรินต์ 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 ของ SDK ของ Dynamic Links
โดยค่าเริ่มต้น Dynamic Links SDK จะใช้กระดานวางเพื่อปรับปรุง ความน่าเชื่อถือของ Deep Link หลังการติดตั้ง การใช้ Pasteboard ช่วยให้ Dynamic Links มั่นใจได้ว่าเมื่อผู้ใช้เปิดลิงก์แบบไดนามิกแต่ต้อง ติดตั้งแอปก่อน ผู้ใช้จะไปยังเนื้อหาที่ลิงก์เดิมได้ทันทีเมื่อเปิดแอปเป็นครั้งแรกหลัง การติดตั้ง
ข้อเสียของวิธีนี้คือการใช้เพจจะทริกเกอร์ การแจ้งเตือนใน iOS 14 ขึ้นไป ดังนั้น ครั้งแรกที่ผู้ใช้เปิดแอป หากเพจเจอร์มี URL ของลิงก์แบบไดนามิก ผู้ใช้จะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงเพจเจอร์ ซึ่งอาจทำให้เกิดความสับสน
หากต้องการปิดใช้ลักษณะการทำงานนี้ ให้แก้ไขไฟล์
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
Getter ดังนี้
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.)
หากทดสอบ Dynamic Link จากสถานะแอปที่สิ้นสุดแล้ว (เช่น ปิดแอปด้วยการปัด)