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

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

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

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

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

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

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

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.6.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 แต่ละเวอร์ชันในบรรทัดทรัพยากร 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.1.2'
    }
    หากกำลังมองหาโมดูลไลบรารีสำหรับ Kotlin โดยเฉพาะ ตั้งแต่เดือนตุลาคม 2023 (Firebase BoM 32.5.0) เป็นต้นไป นักพัฒนาซอฟต์แวร์ทั้ง Kotlin และ Java จะใช้โมดูลไลบรารีหลักได้ (ดูรายละเอียดได้ในคําถามที่พบบ่อยเกี่ยวกับโครงการริเริ่มนี้)
  3. ในคอนโซล Firebase ให้เปิดส่วน Dynamic Links
  4. หากยังไม่ได้ยอมรับข้อกำหนดในการให้บริการและตั้งค่าโดเมนสำหรับ Dynamic Links ให้ดำเนินการเมื่อได้รับข้อความแจ้ง

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

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

ใช้คอนโซล Firebase

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

หากต้องการสร้าง Dynamic Link ให้สร้างออบเจ็กต์ DynamicLink ใหม่ด้วยตัวสร้าง โดยระบุพารามิเตอร์ Dynamic Link ด้วยเมธอดตัวสร้าง จากนั้นโทรไปที่ buildDynamicLink หรือ buildShortDynamicLink

ตัวอย่างขั้นต่ำต่อไปนี้สร้าง Dynamic Link ยาวเพื่อไปที่ 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();

หากต้องการสร้าง Dynamic Link แบบสั้น ให้สร้าง 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
                    // ...
                }
            }
        });

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

ตัวอย่างต่อไปนี้สร้าง Dynamic Link ที่มีการตั้งค่าพารามิเตอร์ทั่วไปหลายรายการ

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()

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

พารามิเตอร์ DynamicLink
setLink

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

setDomainUriPrefix คำนำหน้า URL ของ Dynamic Link ซึ่งดูได้ในคอนโซล Firebase โดเมน Dynamic Link จะมีลักษณะดังตัวอย่างต่อไปนี้
https://example.com/link
https://example.page.link
AndroidParameters
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอป ระบุการดำเนินการนี้เพื่อดำเนินการอื่นๆ นอกเหนือจากการติดตั้งแอปจาก Play Store เมื่อไม่ได้ติดตั้งแอปดังกล่าว เช่น เปิดเนื้อหาเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมตสำหรับแอป
setMinimumVersion versionCode ของแอปเวอร์ชันขั้นต่ำที่สามารถเปิดลิงก์ได้ หากแอปที่ติดตั้งเป็นเวอร์ชันเก่า ระบบจะนำผู้ใช้ไปที่ Play Store เพื่ออัปเกรดแอป
IosParameters
setAppStoreId รหัส App Store ของแอปซึ่งใช้เพื่อส่งผู้ใช้ไปยัง App Store เมื่อไม่ได้ติดตั้งแอป
setFallbackUrl ลิงก์ที่จะเปิดเมื่อไม่ได้ติดตั้งแอป ระบุค่านี้เพื่อดำเนินการอย่างอื่นนอกเหนือจากการติดตั้งแอปจาก App Store เมื่อไม่ได้ติดตั้งแอป เช่น เปิดเนื้อหาเวอร์ชันเว็บบนอุปกรณ์เคลื่อนที่ หรือแสดงหน้าโปรโมตสําหรับแอป
setCustomScheme สกีม URL ที่กำหนดเองของแอป หากกำหนดไว้เป็นค่าอื่นที่ไม่ใช่รหัสกลุ่มของแอป
setIpadFallbackUrl ลิงก์ที่จะเปิดใน iPad เมื่อไม่ได้ติดตั้งแอป ระบุค่านี้เพื่อดำเนินการอย่างอื่นนอกเหนือจากการติดตั้งแอปจาก App Store เมื่อไม่ได้ติดตั้งแอป เช่น เปิดเนื้อหาเวอร์ชันเว็บ หรือแสดงหน้าโปรโมตสําหรับแอป
setIpadBundleId รหัสกลุ่มของแอป iOS ที่จะใช้ใน iPad เพื่อเปิดลิงก์ แอปต้องเชื่อมต่อกับโปรเจ็กต์จากหน้าภาพรวมของคอนโซล Firebase
setMinimumVersion หมายเลขเวอร์ชันของแอปเวอร์ชันขั้นต่ำที่สามารถเปิดลิงก์ได้ ระบบจะส่ง Flag นี้ไปยังแอปเมื่อเปิดแอป และแอปจะต้องตัดสินใจว่าจะทำอย่างไรกับ Flag นี้
NavigationInfoParameters
setForcedRedirectEnabled หากตั้งค่าเป็น "1" ระบบจะข้ามหน้าตัวอย่างแอปเมื่อเปิด Dynamic Link และเปลี่ยนเส้นทางไปยังแอปหรือ Store แทน หน้าตัวอย่างแอป (เปิดใช้โดยค่าเริ่มต้น) สามารถส่งผู้ใช้ไปยังปลายทางที่เหมาะสมที่สุดได้เมื่อเปิด Dynamic Links ในแอป อย่างไรก็ตาม หากคุณต้องการให้เปิด Dynamic Link เฉพาะในแอปที่เปิด Dynamic Links ได้โดยไม่ใช้หน้านี้ คุณปิดใช้หน้านี้ได้โดยใช้พารามิเตอร์นี้ พารามิเตอร์นี้จะส่งผลต่อลักษณะการทํางานของ Dynamic Link ใน iOS เท่านั้น
พารามิเตอร์เมตาแท็กโซเชียล
setTitle ชื่อที่จะใช้เมื่อแชร์ Dynamic Link ในโพสต์โซเชียล
setDescription คำอธิบายที่จะใช้เมื่อแชร์ Dynamic Link ในโพสต์โซเชียล
setImageUrl URL ของรูปภาพที่เกี่ยวข้องกับลิงก์นี้ รูปภาพควรมีขนาดอย่างน้อย 300x200 พิกเซล และไม่เกิน 300 KB
พารามิเตอร์ Google Analytics
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

หากต้องการย่อ Dynamic Link ที่ยาว ให้ระบุ URL ของ Dynamic Link โดยใช้ 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
                    // ...
                }
            }
        });