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

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

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

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

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

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

เช่นเดียวกับ Deep Link ธรรมดาคุณต้องเพิ่มตัวกรอง Intent ใหม่ลงในกิจกรรมที่จัดการ ลิงก์ในรายละเอียดสำหรับแอปของคุณ ตัวกรอง Intent ควรตรวจจับลิงก์ในรายละเอียดของโดเมนของคุณ เนื่องจาก ลิงก์แบบไดนามิกจะเปลี่ยนเส้นทางไปยังโดเมนของคุณหากติดตั้งแอปแล้ว คุณต้องดำเนินการนี้เพื่อให้แอปดำเนินการต่อไปนี้ได้ รับข้อมูลลิงก์แบบไดนามิกหลังจากติดตั้ง/อัปเดตจาก 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 โดยปกติจะมีการเพิ่ม URL นี้โดยอัตโนมัติโดย ปลั๊กอิน Gradle ภาษาgoogle-services
    • ใส่แท็ก ไฟล์การกำหนดค่า google-services.json ในแอปของคุณ
    • โปรดโทรหา FirebaseAnalytics.getInstance() ก่อนโทร FirebaseDynamicLinks.getDynamicLink()

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

ตรวจสอบว่าคุณได้เพิ่มลายนิ้วมือของใบรับรอง 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 สำหรับแอป ลิงก์สำหรับการมีส่วนร่วม Firebase จะจัดการเรื่องนี้โดยอัตโนมัติสำหรับโดเมนลิงก์แบบไดนามิก แต่คุณสามารถตรวจสอบ โดยการเปิดไฟล์ assetlinks.json ที่โฮสต์ในโดเมนลิงก์แบบไดนามิกของคุณ: วันที่

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

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

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