รับลิงก์แบบไดนามิกของ Firebase บน Android

หากต้องการรับ Firebase Dynamic Links ที่ คุณสร้างขึ้น คุณต้องใส่ Dynamic Links SDK ไว้ในแอปและเรียกใช้เมธอด FirebaseDynamicLinks.getDynamicLink() เมื่อแอปโหลดเพื่อรับข้อมูลที่ส่งใน Dynamic Link

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ดำเนินการ

    เมื่อลงทะเบียนแอป ให้ระบุคีย์การรับรอง SHA-1 หากคุณใช้ App Link ให้ระบุคีย์ SHA-256 ด้วย

  2. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็น <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง Dynamic Links สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี

    เราขอแนะนําให้เปิดใช้ Google Analytics ในโปรเจ็กต์ Firebase และเพิ่ม Firebase SDK สําหรับ Google Analytics ลงในแอปเพื่อให้ได้รับประสบการณ์การใช้งาน Dynamic Links ที่ดีที่สุด

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
    
        // 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 เวอร์ชันที่เข้ากันได้อยู่เสมอ

    (วิธีอื่น)  เพิ่มไลบรารี 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.1.2'
    }
    หากกำลังมองหาโมดูลไลบรารีสำหรับ Kotlin โดยเฉพาะ ตั้งแต่เดือนตุลาคม 2023 (Firebase BoM 32.5.0) เป็นต้นไป นักพัฒนาซอฟต์แวร์ทั้ง Kotlin และ Java จะใช้โมดูลไลบรารีหลักได้ (ดูรายละเอียดได้ในคําถามที่พบบ่อยเกี่ยวกับโครงการริเริ่มนี้)
  3. เปิดส่วน Dynamic Links ในคอนโซล Firebase ยอมรับข้อกำหนดในการให้บริการหากได้รับข้อความแจ้ง

เช่นเดียวกับ Deep Link แบบธรรมดา คุณต้องเพิ่มตัวกรอง Intent ใหม่ลงในกิจกรรมที่จัดการ Deep Link สําหรับแอปของคุณ ตัวกรอง Intent ควรจับ Deep Link ของโดเมน เนื่องจาก Dynamic 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>

เมื่อผู้ใช้เปิด Dynamic Link ที่มี Deep Link ไปยังรูปแบบและโฮสต์ที่คุณระบุ แอปของคุณจะเริ่มกิจกรรมด้วยตัวกรอง Intent นี้เพื่อจัดการลิงก์

หากต้องการรับ 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
    • ใส่การพึ่งพา Google Analytics โดยปกติแล้ว ปลั๊กอิน google-servicesGradle จะเพิ่มข้อมูลนี้โดยอัตโนมัติ
    • รวมgoogle-services.jsonไฟล์การกําหนดค่าไว้ในแอป
    • โทรหา FirebaseAnalytics.getInstance() ก่อนโทรหา FirebaseDynamicLinks.getDynamicLink()

ใน Android 6.0 (API ระดับ 23) ขึ้นไป คุณสามารถตั้งค่าแอปให้จัดการ Dynamic Links ได้โดยตรงเมื่อติดตั้งแอปแล้วโดยใช้ Android App Link

ตรวจสอบว่าคุณได้เพิ่มลายนิ้วมือใบรับรอง SHA256 สําหรับแอปลงในโปรเจ็กต์ในคอนโซล Firebase แล้ว Dynamic Links จะจัดการการตั้งค่าการเชื่อมโยงเว็บไซต์ App Links สำหรับโดเมน Dynamic Links ของคุณ

เพิ่มตัวกรอง Intent ที่ยืนยันโดยอัตโนมัติลงในกิจกรรมที่จะจัดการ Dynamic Link โดยตั้งค่าโฮสต์เป็นโดเมน Dynamic Links ของโปรเจ็กต์ตามที่พบในคอนโซล 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 เป็นโดเมน Dynamic Links ไม่ใช่โดเมนของ Deep Link

คุณต้องลงทะเบียนตัวกรอง Intent autoVerify ทั้งหมดในไฟล์ Manifest เพื่อให้ App Link ทำงานได้ Firebase จะจัดการเรื่องนี้ให้โดยอัตโนมัติสำหรับโดเมน Dynamic Links แต่คุณสามารถตรวจสอบได้โดยเปิดไฟล์ assetlinks.json ที่โฮสต์ในโดเมน Dynamic Links

https://YOUR_DOMAIN/.well-known/assetlinks.json
ควรใส่ชื่อแพ็กเกจของแอป Firebase ทั้งหมด

ตอนนี้ระบบจะส่ง Dynamic Links ไปยังแอปของคุณโดยตรง คุณจะรับ Deep Link และข้อมูลอื่นๆ ของ Dynamic Link ได้โดยเรียกใช้ getDynamicLink() ในกิจกรรมที่คุณเพิ่มตัวกรอง Intent ของ App Links ไว้ (ตามที่อธิบายไว้ในจัดการ Deep Link)

หมายเหตุ: เนื่องจากการเปิดใช้งานผ่าน App Link จะนําผู้ใช้ไปยังแอปโดยตรง ลิงก์แบบไดนามิกจึงไม่สามารถปฏิบัติตามเวอร์ชันขั้นต่ำที่จําเป็น ดังนั้นเมื่อเปิดแอปแล้ว คุณจะต้องเปรียบเทียบเวอร์ชันต่ำสุดของ Dynamic Link ( getminimumappversion) กับ PackageInfo.versionCode และเปลี่ยนเส้นทางผู้ใช้ให้อัปเกรดแอปหากจำเป็นโดยใช้ getUpdateAppIntent