หากต้องการรับลิงก์แบบไดนามิกของ Firebase ที่
คุณสร้างไว้ คุณต้องรวม SDK ลิงก์แบบไดนามิกไว้ในแอป และเรียกใช้เมธอด
FirebaseDynamicLinks.getDynamicLink()
เมื่อแอปโหลดเพื่อรับข้อมูลที่ส่งในลิงก์แบบไดนามิก
ตั้งค่า Firebase และ Dynamic Links SDK
เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ทำ
เมื่อคุณลงทะเบียนแอป ให้ระบุคีย์ SHA-1 Signing หากคุณใช้ App Link ให้ระบุคีย์ SHA-256 ด้วย
-
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยทั่วไปจะเป็น
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) ให้เพิ่มทรัพยากร Dependency สำหรับไลบรารีลิงก์แบบไดนามิกสำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันไลบรารีเราขอแนะนำให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปเพื่อประสบการณ์การใช้งานลิงก์แบบไดนามิกที่ดีที่สุด
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.2")) // Add the dependencies for the Dynamic Links and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-dynamic-links' implementation 'com.google.firebase:firebase-analytics' }
การใช้ Firebase Android BoM จะทำให้ แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้เสมอ
(ทางเลือก) เพิ่มทรัพยากร Dependency ของไลบรารี Firebase โดยไม่ต้องใช้ BoM
หากเลือกไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดทรัพยากร Dependency
โปรดทราบว่าหากคุณใช้ไลบรารี Firebase หลายในแอป เราขอแนะนำให้ใช้ BoM ในการจัดการเวอร์ชันไลบรารีซึ่งจะดูแลให้ทุกเวอร์ชันทำงานร่วมกันได้
dependencies { // Add the dependencies for the Dynamic Links and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-dynamic-links:22.1.0' implementation 'com.google.firebase:firebase-analytics:22.0.2' }
- ในคอนโซล Firebase ให้เปิดส่วนลิงก์แบบไดนามิก ยอมรับข้อกำหนดในการให้บริการ หากคุณได้รับแจ้งให้ทำเช่นนั้น
เพิ่มตัวกรอง Intent สำหรับ Deep Link
เช่นเดียวกับ
Deep Link ธรรมดา คุณต้องเพิ่มตัวกรอง Intent ใหม่ในกิจกรรมที่จัดการ Deep Link สำหรับแอปของคุณ ตัวกรอง 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 นี้เพื่อจัดการลิงก์
จัดการ Deep Link
ในการรับ Deep Link ให้เรียกเมธอด getDynamicLink()
Kotlin+KTX
Firebase.dynamicLinks .getDynamicLink(intent) .addOnSuccessListener(this) { pendingDynamicLinkData: PendingDynamicLinkData? -> // Get deep link from result (may be null if no link is found) var deepLink: Uri? = null if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.link } // Handle the deep link. For example, open the linked // content, or apply promotional credit to the user's // account. // ... } .addOnFailureListener(this) { e -> Log.w(TAG, "getDynamicLink:onFailure", e) }
Java
FirebaseDynamicLinks.getInstance() .getDynamicLink(getIntent()) .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() { @Override public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) { // Get deep link from result (may be null if no link is found) Uri deepLink = null; if (pendingDynamicLinkData != null) { deepLink = pendingDynamicLinkData.getLink(); } // Handle the deep link. For example, open the linked // content, or apply promotional credit to the user's // account. // ... // ... } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "getDynamicLink:onFailure", e); } });
คุณต้องเรียกใช้ getDynamicLink()
ในทุกกิจกรรมที่อาจเปิดใช้โดยลิงก์ แม้ว่าลิงก์นั้นอาจพร้อมใช้งานจาก Intent โดยใช้ getIntent().getData()
ก็ตาม การเรียกใช้ getDynamicLink()
จะดึงลิงก์และล้างข้อมูลดังกล่าวเพื่อให้แอปประมวลผลเพียงครั้งเดียว
ปกติแล้วคุณจะเรียกใช้ getDynamicLink()
ในกิจกรรมหลัก รวมถึงกิจกรรมใดก็ตามที่เปิดโดยตัวกรอง Intent ซึ่งตรงกับลิงก์นั้น
บันทึกการวิเคราะห์
คุณติดตามเหตุการณ์ต่อไปนี้ได้โดยอัตโนมัติใน Google Analytics และแสดงในคอนโซล Firebase
dynamic_link_app_open
dynamic_link_first_open
dynamic_link_app_update
หากต้องการบันทึกเหตุการณ์เหล่านี้ คุณต้องกำหนดค่า Google Analytics ก่อนที่จะดึงข้อมูล Deep Link ตรวจสอบว่าเป็นไปตามเงื่อนไขต่อไปนี้
- โทรหา
FirebaseDynamicLinks.getDynamicLink()
ในจุดแรกเข้าของแอป: - กิจกรรมใน Launcher เช่น
action="android.intent.action.MAIN"
,category="android.intent.category.LAUNCHER"
- จุดแรกเข้าของกิจกรรม เช่น
onStart()
,onCreate()
- กิจกรรม Deep Link
- ตั้งค่าและใช้ Google Analytics ดังนี้
- รวมทรัพยากร Dependency ของ Google Analytics ซึ่งปกติแล้วปลั๊กอิน
google-services
Gradle จะเพิ่มผู้ใช้โดยอัตโนมัติ - รวมไฟล์การกำหนดค่า
google-services.json
ไว้ในแอป - โปรดโทรหา
FirebaseAnalytics.getInstance()
ก่อนโทรหาFirebaseDynamicLinks.getDynamicLink()
การจัดการลิงก์แบบไดนามิกโดยใช้ลิงก์แอป
ใน Android 6.0 (API ระดับ 23) ขึ้นไป คุณตั้งค่าแอปให้จัดการลิงก์แบบไดนามิกได้โดยตรงเมื่อติดตั้งแอปไว้แล้วโดยใช้ลิงก์แอป Android
ตรวจสอบว่าคุณได้เพิ่มลายนิ้วมือของใบรับรอง SHA256 สำหรับแอปในโปรเจ็กต์ในคอนโซล Firebase ลิงก์แบบไดนามิกจะจัดการการตั้งค่าการเชื่อมโยงเว็บไซต์ของลิงก์แอปสำหรับโดเมนลิงก์แบบไดนามิก
เพิ่มตัวกรอง Intent ที่ยืนยันอัตโนมัติลงในกิจกรรมที่จะจัดการลิงก์แบบไดนามิก โดยตั้งค่าโฮสต์เป็นโดเมนลิงก์แบบไดนามิกของโปรเจ็กต์เป็นที่พบในคอนโซล Firebase ใน AndroidManifest.xml
:
<intent-filter android:autoVerify="true"> <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/link" android:scheme="http"/> <data android:host="example.com/link" android:scheme="https"/> </intent-filter>
โปรดทราบว่าต้องตั้งค่า android:host
เป็นโดเมนลิงก์แบบไดนามิก ไม่ใช่โดเมนของ Deep Link
คุณต้องลงทะเบียนตัวกรอง Intent ทั้งหมดของ autoVerify
ในไฟล์ Manifest เพื่อให้ App Link มีส่วนร่วม Firebase จะจัดการเรื่องนี้โดยอัตโนมัติสำหรับโดเมนลิงก์แบบไดนามิก แต่คุณตรวจสอบเรื่องนี้ได้โดยการเปิดไฟล์ assetlinks.json
ที่โฮสต์ในโดเมนลิงก์แบบไดนามิก ดังนี้
https://YOUR_DOMAIN/.well-known/assetlinks.jsonควรรวมชื่อแพ็กเกจของแอป Firebase ทั้งหมด
ระบบจะส่งลิงก์แบบไดนามิกไปยังแอปของคุณโดยตรง คุณจะดู Deep Link และข้อมูลลิงก์แบบไดนามิกอื่นๆ ได้โดยเรียกใช้ getDynamicLink()
ในกิจกรรมที่คุณเพิ่มตัวกรอง Intent ของลิงก์แอป (ตามที่อธิบายไว้ในส่วนจัดการ Deep Link)
หมายเหตุ: เนื่องจากการเรียกใช้ผ่าน App Link จะนำผู้ใช้ไปยังแอปโดยตรง ลิงก์แบบไดนามิกจึงใช้เวอร์ชันขั้นต่ำที่กำหนดไม่ได้ ดังนั้นเมื่อเปิดแอปแล้ว คุณจะต้องเปรียบเทียบเวอร์ชันขั้นต่ำของลิงก์แบบไดนามิก ( getminimumappversion) กับ PackageInfo.versionCode และเปลี่ยนเส้นทางผู้ใช้เพื่ออัปเกรดแอปหากจำเป็นโดยใช้ getUpdateAppIntent