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

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

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

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

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

เช่นเดียวกับ 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 ให้เรียกเมธอด 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