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

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

  1. หากคุณยังไม่ได้ เพิ่ม Firebase ในโครงการ Android ของคุณ

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

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

    (ทางเลือก) เพิ่มการพึ่งพาไลบรารี Firebase โดยไม่ ใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการขึ้นต่อกัน

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

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

โดยปกติคุณจะเรียก getDynamicLink() ในกิจกรรมหลักตลอดจนกิจกรรมใดๆ ที่เรียกใช้โดยตัวกรอง Intent ที่ตรงกับลิงก์

บันทึกการวิเคราะห์

เหตุการณ์ต่อไปนี้สามารถติดตามได้โดยอัตโนมัติใน Google Analytics และแสดงในคอนโซล Firebase

  • dynamic_link_app_open
  • dynamic_link_first_open
  • dynamic_link_app_update

ในการลงทะเบียนเหตุการณ์เหล่านี้ คุณต้องกำหนดค่า Google Analytics ก่อนที่จะเรียกข้อมูลลิงก์ในรายละเอียด ตรวจสอบว่าตรงตามเงื่อนไขต่อไปนี้:

  • เรียก FirebaseDynamicLinks.getDynamicLink() ในจุดเข้าใช้งานแอปของคุณ:
    • กิจกรรมเปิดตัว เช่น: action="android.intent.action.MAIN" , category="android.intent.category.LAUNCHER"
    • จุดเข้ากิจกรรม เช่น onStart() , onCreate()
    • กิจกรรมการเชื่อมโยงลึก
  • ตั้งค่าและใช้ Google Analytics:
    • รวมการพึ่งพา Google Analytics โดยปกติแล้วปลั๊กอิน Gradle ของ google-services จะถูกเพิ่มโดยอัตโนมัติ
    • รวมไฟล์กำหนดค่า google-services.json ไว้ในแอปของคุณ
    • โทร FirebaseAnalytics.getInstance() ก่อนที่จะเรียก FirebaseDynamicLinks.getDynamicLink()

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

ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มลายนิ้วมือใบรับรอง 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 ต้องตั้งค่าเป็นโดเมนไดนามิกลิงก์ของคุณ ไม่ใช่โดเมนของลิงก์ในรายละเอียด

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

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

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

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