หากต้องการรับ Firebase Dynamic Links ที่ คุณสร้างขึ้น คุณต้องรวม Dynamic Links SDK ไว้ในแอปของคุณและเรียกใช้เมธอด FirebaseDynamicLinks.getDynamicLink()
เมื่อแอปของคุณโหลดเพื่อรับข้อมูลที่ส่งผ่านใน Dynamic Link
ตั้งค่า Firebase และ Dynamic Links SDK
ติดตั้งและเริ่มต้น Firebase SDK สำหรับ Flutter หากคุณยังไม่ได้ดำเนินการ
จากไดเร็กทอรีรากของโปรเจ็กต์ Flutter ของคุณ ให้รันคำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอิน Dynamic Links:
flutter pub add firebase_dynamic_links
หากคุณกำลังสร้างแอป Android ให้เปิดหน้า การตั้งค่าโปรเจ็กต์ ของคอนโซล Firebase และตรวจสอบว่าคุณได้ระบุคีย์การลงนาม SHA-1 ของคุณแล้ว หากคุณใช้ App Links ให้ระบุคีย์ SHA-256 ด้วย
บูรณาการแพลตฟอร์ม
ทำตามขั้นตอนการรวมแพลตฟอร์มต่อไปนี้สำหรับแพลตฟอร์มที่คุณกำลังสร้างแอปของคุณ
หุ่นยนต์
บน 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>
เมื่อผู้ใช้เปิดลิงก์แบบไดนามิกด้วยลิงก์ในรายละเอียดไปยังรูปแบบและโฮสต์ที่คุณระบุ แอปของคุณจะเริ่มกิจกรรมด้วยตัวกรองความตั้งใจนี้เพื่อจัดการลิงก์
ขั้นตอนต่อไปคือตรวจสอบให้แน่ใจว่าลายนิ้วมือ SHA-256 ของใบรับรองการลงนามได้รับการลงทะเบียนในคอนโซล Firebase สำหรับแอปแล้ว คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการดึงลายนิ้วมือ SHA-256 ของคุณได้ในหน้า การตรวจสอบสิทธิ์ไคลเอ็นต์ของคุณ
แพลตฟอร์มของ Apple
สร้างบัญชีนักพัฒนา Apple หากคุณยังไม่มี
ในหน้า การตั้งค่าโปรเจ็กต์ ของคอนโซล Firebase ตรวจสอบให้แน่ใจว่าแอป iOS ของคุณได้รับการกำหนดค่าอย่างถูกต้องด้วย App Store ID และ Team ID ของคุณ
บนไซต์ Apple Developer ให้สร้างโปรไฟล์การจัดเตรียมสำหรับแอปของคุณโดยเปิดใช้งานความสามารถ Associated Domain
ใน Xcode ให้ทำดังต่อไปนี้:
เปิดแอปของคุณใต้ส่วนหัว TARGETS
ในหน้าการลงนามและความสามารถ ตรวจสอบให้แน่ใจว่าทีมของคุณลงทะเบียนแล้ว และโปรไฟล์การจัดเตรียมของคุณได้รับการตั้งค่าแล้ว
ในหน้าการลงนามและความสามารถ ให้เปิดใช้งาน โดเมนที่เกี่ยวข้อง และเพิ่มรายการต่อไปนี้ในรายการโดเมนที่เกี่ยวข้อง (แทนที่ตัวอย่างด้วยโดเมนของคุณ):
applinks:example.page.link
ในหน้าข้อมูล ให้เพิ่มประเภท URL ให้กับโครงการของคุณ ตั้งค่าฟิลด์ Schemes 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 Links SDK
ตามค่าเริ่มต้น Dynamic Links SDK จะใช้เพซบอร์ดเพื่อปรับปรุงความน่าเชื่อถือของลิงก์ในรายละเอียดหลังการติดตั้ง การใช้เพสต์บอร์ดช่วยให้ไดนามิกลิงก์มั่นใจได้ว่าเมื่อผู้ใช้เปิดไดนามิกลิงก์แต่จำเป็นต้องติดตั้งแอปของคุณก่อน ผู้ใช้สามารถไปที่เนื้อหาที่ลิงก์ต้นฉบับได้ทันทีเมื่อเปิดแอปเป็นครั้งแรกหลังการติดตั้ง
ข้อเสียคือการใช้พาสบอร์ดจะทำให้เกิดการแจ้งเตือนบน iOS 14 และใหม่กว่า ดังนั้น ในครั้งแรกที่ผู้ใช้เปิดแอปของคุณ หากเพสต์บอร์ดมี URL ลิงก์แบบไดนามิก พวกเขาจะเห็นการแจ้งเตือนว่าแอปของคุณเข้าถึงเพสต์บอร์ด ซึ่งอาจทำให้เกิดความสับสนได้
หากต้องการปิดใช้งานพฤติกรรมนี้ ให้แก้ไขไฟล์
Info.plist
ของโปรเจ็กต์ Xcode และตั้งค่าคีย์FirebaseDeepLinkPasteboardRetrievalEnabled
เป็นNO
จัดการลิงก์ในรายละเอียด
ในการจัดการไดนามิกลิงก์ในแอปพลิเคชันของคุณ ต้องมีการดำเนินการสองสถานการณ์
รัฐที่สิ้นสุด
ตั้งค่าวิธีการต่อไปนี้:
-
FirebaseDynamicLinks.getInitialLink
- ส่งคืนFuture<PendingDynamicLinkData?>
-
FirebaseDynamicLinks.onLink
- ตัวจัดการเหตุการณ์ที่ส่งคืนStream
ที่มีPendingDynamicLinkData?
Android จะได้รับลิงก์ผ่าน FirebaseDynamicLinks.getInitialLink
เสมอจากสถานะที่สิ้นสุด แต่ไม่รับประกันบน iOS ดังนั้นจึงควรตั้งค่าทั้งสองตามลำดับต่อไปนี้เพื่อให้แน่ใจว่าแอปพลิเคชันของคุณจะได้รับลิงก์:
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 คุณจะต้องใช้อุปกรณ์จริง คุณจะต้องเรียกใช้แอปในโหมด release (เช่น flutter run --release
) หากทดสอบลิงก์แบบไดนามิกจากสถานะแอปที่ถูกยกเลิก (เช่น แอปถูกปัดปิด)