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

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

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

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

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

    เมื่อคุณลงทะเบียนแอป ให้ระบุคีย์การลงนาม SHA-1 หากใช้ 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.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 เวอร์ชันที่เข้ากันได้เสมอ

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

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

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

ใช้คอนโซล Firebase

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

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

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

พารามิเตอร์ลิงก์แบบไดนามิก
setLink

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

ตั้งค่าชื่อโดเมน UriPrefix คำนำหน้า URL ของลิงก์แบบไดนามิก ซึ่งดูได้ในคอนโซล Firebase โดเมนของลิงก์แบบไดนามิกจะมีลักษณะดังตัวอย่างต่อไปนี้
https://example.com/link
https://example.page.link
พารามิเตอร์ Android
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอปไว้ ระบุสิ่งนี้เพื่อดำเนินการอย่างอื่นนอกจากติดตั้งแอปจาก Play Store ตอนที่ไม่ได้ติดตั้งแอปไว้ เช่น เปิดเนื้อหาในเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมชันสำหรับแอปของคุณ
ตั้งค่าเวอร์ชันต่ำสุด versionCode เวอร์ชันขั้นต่ำของแอปที่เปิดลิงก์ได้ หากแอปที่ติดตั้งเป็นเวอร์ชันเก่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป
พารามิเตอร์ iOS
ตั้งค่ารหัสร้านค้าแอป รหัส App Store ของแอป ซึ่งใช้เพื่อส่งผู้ใช้ไปยัง App Store เมื่อไม่ได้ติดตั้งแอป
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอปไว้ ระบุสิ่งนี้เพื่อดำเนินการอย่างอื่นนอกจากติดตั้งแอปของคุณจาก App Store ตอนที่ไม่ได้ติดตั้งแอปไว้ เช่น เปิดเนื้อหาในเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมชันสำหรับแอปของคุณ
ตั้งค่ารูปแบบที่กำหนดเอง รูปแบบ URL ที่กำหนดเองของแอป หากกำหนดให้เป็นอย่างอื่นที่ไม่ใช่รหัสชุดของแอป
setIpadFallbackUrl ลิงก์ที่จะเปิดใน iPad เมื่อไม่ได้ติดตั้งแอปไว้ ระบุสิ่งนี้เพื่อดำเนินการอย่างอื่นนอกเหนือจากการติดตั้งแอปจาก App Store ตอนที่ไม่ได้ติดตั้งแอป เช่น เปิดเนื้อหาเวอร์ชันเว็บ หรือแสดงหน้าโปรโมตสำหรับแอปของคุณ
setIpadBundleId รหัสชุดของแอป iOS ที่จะใช้ใน iPad เพื่อเปิดลิงก์ แอปต้องเชื่อมต่อกับโปรเจ็กต์จากหน้าภาพรวมของคอนโซล Firebase
ตั้งค่าเวอร์ชันต่ำสุด หมายเลขเวอร์ชันของแอปเวอร์ชันขั้นต่ำที่เปิดลิงก์ได้ ระบบจะส่งแฟล็กนี้ไปยังแอปของคุณเมื่อเปิด และแอปของคุณต้องตัดสินใจว่าจะดําเนินการอย่างไรกับแอปนั้น
พารามิเตอร์ข้อมูลการนำทาง
setForcedRedirectEnabled หากตั้งค่าเป็น "1" ให้ข้ามหน้าตัวอย่างแอปเมื่อลิงก์แบบไดนามิกเปิดอยู่ และเปลี่ยนเส้นทางไปยังแอปหรือร้านค้าแทน หน้าตัวอย่างแอป (เปิดใช้โดยค่าเริ่มต้น) สามารถส่งผู้ใช้ไปยังปลายทางที่เหมาะสมที่สุดได้อย่างน่าเชื่อถือยิ่งขึ้นเมื่อเปิดลิงก์แบบไดนามิกในแอป อย่างไรก็ตาม หากคุณคาดว่าลิงก์แบบไดนามิกจะเปิดได้เฉพาะในแอปที่สามารถเปิดลิงก์แบบไดนามิกได้อย่างน่าเชื่อถือโดยไม่ต้องมีหน้านี้ ให้ปิดใช้งานด้วยพารามิเตอร์นี้ พารามิเตอร์นี้จะส่งผลต่อลักษณะการทำงานของลิงก์แบบไดนามิกใน iOS เท่านั้น
พารามิเตอร์เมตาแท็กโซเชียล
ตั้งชื่อ ชื่อที่จะใช้เมื่อแชร์ลิงก์แบบไดนามิกในโพสต์บนโซเชียลเน็ตเวิร์ก
setDescription รายละเอียดที่จะใช้เมื่อแชร์ลิงก์แบบไดนามิกในโพสต์บนโซเชียลเน็ตเวิร์ก
setImageUrl URL ไปยังรูปภาพที่เกี่ยวข้องกับลิงก์นี้ รูปภาพควรมีขนาดอย่างน้อย 300x200 พิกเซลและเล็กกว่า 300 KB
พารามิเตอร์ GoogleAnalytics
setSource
setMedium
setCampaign
setTerm
setContent
พารามิเตอร์การวิเคราะห์ 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
                    // ...
                }
            }
        });