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

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

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

    เมื่อลงทะเบียนแอป ให้ระบุคีย์ Signing SHA-1 หากใช้ App Links ให้ระบุคีย์ 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:35.0.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:24.0.0'
    }
  3. ในคอนโซล Firebase ให้เปิดส่วน Dynamic Links ยอมรับข้อกำหนดในการให้บริการหากได้รับข้อความแจ้งให้ดำเนินการ

เช่นเดียวกับ 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

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) ขึ้นไป คุณสามารถตั้งค่าแอปให้จัดการ 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 Links ทำงาน 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 จะนำผู้ใช้ไปยังแอปโดยตรง ลิงก์แบบไดนามิก จึงไม่สามารถใช้เวอร์ชันขั้นต่ำที่จำเป็นได้ ดังนั้นเมื่อเปิดแอปแล้ว คุณต้องเปรียบเทียบเวอร์ชันขั้นต่ำของลิงก์แบบไดนามิก ( getminimumappversion) กับ PackageInfo.versionCode และเปลี่ยนเส้นทางผู้ใช้ให้อัปเกรดแอปหากจำเป็นโดยใช้ getUpdateAppIntent