สร้างลิงก์แบบไดนามิกบน Android

คุณสร้างลิงก์แบบไดนามิกแบบสั้นหรือแบบยาวได้ด้วย Firebase Dynamic Links Builder API API นี้ยอมรับลิงก์แบบไดนามิกแบบยาวหรือออบเจ็กต์ที่มีพารามิเตอร์ลิงก์แบบไดนามิก และแสดงผล URL เหมือนตัวอย่างต่อไปนี้

https://example.com/link/WXYZ
https://example.page.link/WXYZ

คุณต้องใส่ Firebase SDK ก่อนจึงจะสร้างลิงก์แบบไดนามิกในแอป Android ได้ หากตั้งค่าแอปให้รับลิงก์แบบไดนามิก แสดงว่าคุณดำเนินการตามขั้นตอนเหล่านี้เสร็จแล้วและข้ามส่วนนี้ได้

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

    หากคุณมีโดเมนลิงก์แบบไดนามิกอยู่แล้ว โปรดสังเกตข้อมูลนี้ คุณต้องระบุโดเมนลิงก์แบบไดนามิกเมื่อสร้างลิงก์แบบไดนามิกแบบเป็นโปรแกรม

  5. แนะนำ: ระบุรูปแบบ URL ที่อนุญาตใน Deep Link และลิงก์สำรอง การทำเช่นนี้จะเป็นการป้องกันไม่ให้ผู้ที่ไม่ได้รับอนุญาตสร้างลิงก์แบบไดนามิกที่เปลี่ยนเส้นทางจากโดเมนของคุณไปยังเว็บไซต์ที่คุณควบคุม โปรดดูอนุญาตรูปแบบ URL ที่เจาะจง

ใช้คอนโซล Firebase

หากคุณต้องการสร้างลิงก์แบบไดนามิกเพียงลิงก์เดียวสำหรับการทดสอบหรือสำหรับให้ทีมการตลาดสร้างลิงก์ที่ใช้ในโพสต์โซเชียลมีเดียได้อย่างง่ายดาย วิธีที่ง่ายที่สุดคือไปที่คอนโซล Firebase และสร้างด้วยตนเองตามแบบฟอร์มทีละขั้นตอน

หากต้องการสร้างลิงก์แบบไดนามิก ให้สร้างออบเจ็กต์ DynamicLink ใหม่ด้วย Builder ซึ่งระบุพารามิเตอร์ลิงก์แบบไดนามิกด้วยเมธอดของ Builder จากนั้นโทรหา buildDynamicLink หรือ buildShortDynamicLink

ตัวอย่างเล็กน้อยต่อไปนี้สร้างลิงก์แบบไดนามิกขนาดยาวไปยัง https://www.example.com/ ที่เปิดด้วยแอป Android ใน Android และแอป com.example.ios ใน iOS

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Open links with this app on Android
    androidParameters { }
    // Open links with com.example.ios on iOS
    iosParameters("com.example.ios") { }
}

val dynamicLinkUri = dynamicLink.uri

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Open links with this app on Android
        .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build())
        // Open links with com.example.ios on iOS
        .setIosParameters(new DynamicLink.IosParameters.Builder("com.example.ios").build())
        .buildDynamicLink();

Uri dynamicLinkUri = dynamicLink.getUri();

หากต้องการสร้างลิงก์แบบไดนามิกแบบสั้น ให้สร้าง DynamicLink ด้วยวิธีเดียวกัน แล้วเรียกใช้ buildShortDynamicLink การสร้างลิงก์แบบสั้นต้องใช้การเรียกใช้เครือข่าย ดังนั้นแทนที่จะส่งคืนลิงก์โดยตรง buildShortDynamicLink จะแสดงผล Task ซึ่งจะทำให้ลิงก์แบบสั้นพร้อมใช้งานเมื่อคำขอเสร็จสมบูรณ์ ตัวอย่างเช่น

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    // Set parameters
    // ...
}.addOnSuccessListener { (shortLink, flowchartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowchartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        // Set parameters
        // ...
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });

โดยค่าเริ่มต้น ลิงก์แบบไดนามิกแบบสั้นจะสร้างขึ้นจากคำต่อท้ายลิงก์ที่มีอักขระ 17 ตัว ซึ่งทำให้ไม่มีใครคาดเดาลิงก์แบบไดนามิกที่ถูกต้องได้ หากสำหรับกรณีการใช้งานของคุณ การเดาลิงก์แบบสั้นได้สำเร็จ คุณอาจอยากสร้างคำต่อท้ายที่มีความยาวเท่าที่จำเป็นและไม่ซ้ำ ซึ่งทำได้โดยการส่ง ShortDynamicLink.Suffix.SHORT ไปยังเมธอด buildShortDynamicLink ดังนี้

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
    // Set parameters
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        // ...
        .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
        // ...

คุณใช้ Dynamic Link Builder API เพื่อสร้างลิงก์แบบไดนามิกด้วยพารามิเตอร์ที่รองรับได้ โปรดดูรายละเอียดใน ข้อมูลอ้างอิง API

ตัวอย่างต่อไปนี้สร้างลิงก์แบบไดนามิกที่มีชุดพารามิเตอร์ทั่วไปหลายรายการ

Kotlin+KTX

val dynamicLink = Firebase.dynamicLinks.dynamicLink { // or Firebase.dynamicLinks.shortLinkAsync
    link = Uri.parse("https://www.example.com/")
    domainUriPrefix = "https://example.page.link"
    androidParameters("com.example.android") {
        minimumVersion = 125
    }
    iosParameters("com.example.ios") {
        appStoreId = "123456789"
        minimumVersion = "1.0.1"
    }
    googleAnalyticsParameters {
        source = "orkut"
        medium = "social"
        campaign = "example-promo"
    }
    itunesConnectAnalyticsParameters {
        providerToken = "123456"
        campaignToken = "example-promo"
    }
    socialMetaTagParameters {
        title = "Example of a Dynamic Link"
        description = "This link works whether the app is installed or not!"
    }
}

Java

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLink(Uri.parse("https://www.example.com/"))
        .setDomainUriPrefix("https://example.page.link")
        .setAndroidParameters(
                new DynamicLink.AndroidParameters.Builder("com.example.android")
                        .setMinimumVersion(125)
                        .build())
        .setIosParameters(
                new DynamicLink.IosParameters.Builder("com.example.ios")
                        .setAppStoreId("123456789")
                        .setMinimumVersion("1.0.1")
                        .build())
        .setGoogleAnalyticsParameters(
                new DynamicLink.GoogleAnalyticsParameters.Builder()
                        .setSource("orkut")
                        .setMedium("social")
                        .setCampaign("example-promo")
                        .build())
        .setItunesConnectAnalyticsParameters(
                new DynamicLink.ItunesConnectAnalyticsParameters.Builder()
                        .setProviderToken("123456")
                        .setCampaignToken("example-promo")
                        .build())
        .setSocialMetaTagParameters(
                new DynamicLink.SocialMetaTagParameters.Builder()
                        .setTitle("Example of a Dynamic Link")
                        .setDescription("This link works whether the app is installed or not!")
                        .build())
        .buildDynamicLink();  // Or buildShortDynamicLink()

คุณสามารถตั้งค่าพารามิเตอร์ลิงก์แบบไดนามิกด้วยวิธีต่อไปนี้

พารามิเตอร์ DynamicLink
ตั้งค่าลิงก์

ลิงก์ที่แอปของคุณจะเปิดขึ้น ระบุ URL ที่แอปของคุณจัดการได้ ซึ่งมักจะเป็นเนื้อหาหรือเพย์โหลดของแอป ซึ่งจะเริ่มต้นตรรกะเฉพาะแอป (เช่น ให้เครดิตผู้ใช้ด้วยคูปองหรือแสดงหน้าจอต้อนรับ) ลิงก์นี้ต้องเป็น URL ที่มีรูปแบบเหมาะสม มีการเข้ารหัส URL อย่างถูกต้อง ใช้ HTTP หรือ HTTPS และไม่ใช่ลิงก์แบบไดนามิกอื่น

setDomainUriPrefix คำนำหน้า URL ของลิงก์แบบไดนามิก ซึ่งดูได้ในคอนโซล Firebase โดเมนลิงก์แบบไดนามิกมีหน้าตาดังตัวอย่างต่อไปนี้
https://example.com/link
https://example.page.link
พารามิเตอร์ Android
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอป โดยให้ระบุการดำเนินการนี้เพื่อดำเนินการอื่นที่ไม่ใช่การติดตั้งแอปจาก Play Store เมื่อไม่ได้ติดตั้งแอปดังกล่าว เช่น เปิดเนื้อหาเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมตสำหรับแอป
ตั้งค่าเวอร์ชันขั้นต่ำ versionCode ของแอปเวอร์ชันขั้นต่ำที่สามารถเปิดลิงก์ได้ หากแอปที่ติดตั้งเป็นเวอร์ชันเก่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป
พารามิเตอร์ iOS
ตั้งรหัส App Store รหัส App Store ของแอปซึ่งใช้เพื่อส่งผู้ใช้ไปยัง App Store เมื่อไม่ได้ติดตั้งแอป
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอป ระบุสิ่งนี้เพื่อดำเนินการอื่นนอกเหนือจากการติดตั้งแอปจาก App Store เมื่อไม่มีการติดตั้งแอป เช่น เปิดเนื้อหาเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมตสำหรับแอป
ตั้งค่ารูปแบบที่กำหนดเอง ชุดรูปแบบ URL ที่กำหนดเองของแอป หากกำหนดให้เป็นรูปแบบอื่นที่ไม่ใช่รหัสชุดของแอป
setIpadFallbackUrl ลิงก์ที่จะเปิดใน iPad เมื่อไม่ได้ติดตั้งแอป ระบุสิ่งนี้เพื่อดำเนินการอื่นนอกเหนือจากการติดตั้งแอปจาก App Store เมื่อไม่มีการติดตั้งแอป เช่น เปิดเนื้อหาเวอร์ชันเว็บ หรือแสดงหน้าโปรโมชันสำหรับแอป
รหัสชุด iPad รหัสชุดของแอป iOS ที่จะใช้ใน iPad เพื่อเปิดลิงก์ โดยแอปต้องเชื่อมต่อกับโปรเจ็กต์จากหน้าภาพรวมของคอนโซล Firebase
ตั้งค่าเวอร์ชันขั้นต่ำ หมายเลขเวอร์ชันของแอปเวอร์ชันขั้นต่ำที่สามารถเปิดลิงก์ได้ ระบบจะส่งแฟล็กนี้ไปยังแอปของคุณเมื่อมีการเปิดแอป และแอปจะต้องตัดสินใจว่าจะทำอย่างไรกับการแจ้งเตือนดังกล่าว
NavigationInfoParameters
setForcedRedirectEnabled หากตั้งค่าเป็น "1" ให้ข้ามหน้าตัวอย่างแอปเมื่อเปิดลิงก์แบบไดนามิก และเปลี่ยนเส้นทางไปยังแอปหรือ Store แทน หน้าตัวอย่างแอป (เปิดใช้โดยค่าเริ่มต้น) จะส่งผู้ใช้ไปยังปลายทางที่เหมาะสมที่สุดได้อย่างน่าเชื่อถือมากขึ้นเมื่อเปิดลิงก์แบบไดนามิกในแอป อย่างไรก็ตาม หากคุณคาดว่าลิงก์แบบไดนามิกจะเปิดเฉพาะในแอปที่เปิดลิงก์แบบไดนามิกได้อย่างน่าเชื่อถือโดยไม่ต้องใช้หน้านี้ คุณก็ปิดใช้ได้ด้วยพารามิเตอร์นี้ พารามิเตอร์นี้จะส่งผลต่อลักษณะการทำงานของลิงก์แบบไดนามิกบน iOS เท่านั้น
พารามิเตอร์เมตาแท็กโซเชียล
ตั้งชื่อ ชื่อที่จะใช้เมื่อแชร์ลิงก์แบบไดนามิกในโพสต์บนโซเชียลเน็ตเวิร์ก
คำอธิบายชุด คำอธิบายที่จะใช้เมื่อแชร์ลิงก์แบบไดนามิกในโพสต์บนโซเชียลเน็ตเวิร์ก
URL ตั้งรูปภาพ URL ไปยังรูปภาพที่เกี่ยวข้องกับลิงก์นี้ รูปภาพควรมีขนาดอย่างน้อย 300x200 พิกเซล และเล็กกว่า 300 KB
พารามิเตอร์ Google Analytics
setSource
setMedium
setCampaign
setTerm
setContent
พารามิเตอร์ Analytics ของ Google Play ระบบจะส่งพารามิเตอร์เหล่านี้ (utm_source, utm_medium, utm_campaign, utm_term, utm_content) ไปยัง Play Store รวมถึงต่อท้ายเพย์โหลดลิงก์ด้วย
พารามิเตอร์ Analytics ของ ItunesConnect
setProviderToken
setaffiliateToken
setCampaignToken
พารามิเตอร์ข้อมูลวิเคราะห์ของ iTunes Connect ระบบจะส่งพารามิเตอร์เหล่านี้ (pt, at, ct) ไปยัง App Store

หากต้องการย่อลิงก์แบบไดนามิกแบบยาวให้สั้นลง ให้ระบุ URL ของลิงก์แบบไดนามิกโดยใช้ setLongLink แทนการตั้งค่าพารามิเตอร์ด้วยเครื่องมือสร้างอื่นๆ ดังนี้

Kotlin+KTX

val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync {
    longLink = Uri.parse(
        "https://example.page.link/?link=" +
            "https://www.example.com/&apn=com.example.android&ibn=com.example.ios",
    )
}.addOnSuccessListener { (shortLink, flowChartLink) ->
    // You'll need to import com.google.firebase.dynamiclinks.component1 and
    // com.google.firebase.dynamiclinks.component2

    // Short link created
    processShortLink(shortLink, flowChartLink)
}.addOnFailureListener {
    // Error
    // ...
}

Java

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink()
        .setLongLink(Uri.parse("https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibn=com.example.ios"))
        .buildShortDynamicLink()
        .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
            @Override
            public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                if (task.isSuccessful()) {
                    // Short link created
                    Uri shortLink = task.getResult().getShortLink();
                    Uri flowchartLink = task.getResult().getPreviewLink();
                } else {
                    // Error
                    // ...
                }
            }
        });