Catch up on highlights from Firebase at Google I/O 2023. Learn more

รับ Firebase Dynamic Links บน Android

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

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

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

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

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

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:32.1.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-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    เมื่อใช้ 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-ktx:21.1.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:21.3.0'
    }
    

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:32.1.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 ในบรรทัดอ้างอิง

    โปรดทราบว่าหากคุณใช้ไลบรารี 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.1.0'
        implementation 'com.google.firebase:firebase-analytics:21.3.0'
    }
    
  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() ในกิจกรรมหลักรวมถึงกิจกรรมใดๆ ที่เปิดตัวโดยตัวกรองความตั้งใจที่ตรงกับลิงก์

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

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

คุณต้องลงทะเบียนตัวกรองเจตนา 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 Link (ตามที่อธิบายไว้ใน Handle Deep Link )

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