App Link: คืออะไร หลักการทำงาน และการตั้งค่า

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-14 เวลาอ่าน: 9 นาที

App Link เป็นกลไกของ Android (Android 6.0+) ที่เปิดลิงก์เว็บในแอปที่ติดตั้งไว้โดยอัตโนมัติ โดยข้ามกล่องโต้ตอบการเลือก คำนี้ถูกนำเสนอโดย Google ในปี 2015 พร้อมกับ Android 6.0 Marshmallow ตาม Android Developers App Link ใช้ Digital Asset Links ซึ่งเป็นการยืนยันตัวตนแบบเข้ารหัสผ่านไฟล์บนเซิร์ฟเวอร์ เพื่อยืนยันว่าโดเมนเป็นของนักพัฒนาแอป

ประเด็นสำคัญ

  • App Link — ลิงก์ https ที่เปิดแอปโดยอัตโนมัติโดยไม่ต้องมีกล่องโต้ตอบการเลือก
  • Digital Asset Links — ไฟล์ JSON assetlinks.json บนเซิร์ฟเวอร์ ยืนยันการเชื่อมต่อของโดเมนกับแอป
  • ลายเซ็น SHA256 ของใบรับรอง — องค์ประกอบสำคัญในการยืนยันตัวตนที่เชื่อมโยงนักพัฒนากับโดเมน
  • Intent Filter — คอมโพเนนต์ของ Android ที่ประกาศว่าแอปจัดการกับลิงก์ใดบ้าง
  • ความปลอดภัย — App Link กำจัดกล่องโต้ตอบ “เปิดในแอปหรือเบราว์เซอร์” เพิ่มอัตราการแปลง

App Link (Android App Link) คือลิงก์ HTTPS มาตรฐานที่เมื่อคลิกบนอุปกรณ์ Android จะเปิดแอปที่ติดตั้งไว้โดยอัตโนมัติโดยไม่แสดงกล่องโต้ตอบการเลือกมาตรฐานระหว่างเบราว์เซอร์และแอป Google เปิดตัว App Link ใน Android 6.0 (API 23) เพื่อเป็นวิธีแก้ปัญหากล่องโต้ตอบตัวเลือกที่ลดอัตราการแปลงของ deep link เนื่องจากการคลิกเพิ่มเติมและความสับสนของผู้ใช้

นวัตกรรมสำคัญ: การยืนยัน Android ยืนยันว่าโดเมนเป็นของนักพัฒนาแอปจริง ๆ ผ่าน Digital Asset Links API Google Play Store ตรวจสอบ App Link เมื่อเผยแพร่และสามารถปฏิเสธการอัปเดตหากการยืนยันล้มเหลว ทำให้ App Link ปลอดภัยกว่า Custom URL Scheme: ไม่มีแอปอื่นใดสามารถสกัดกั้นลิงก์ไปยังโดเมนของคุณได้

Digital Asset Links เป็นโปรโตคอลแบบเปิดที่ Google ใช้ไม่เพียง但对于 App Link แต่ยังสำหรับเชื่อมโยงเว็บไซต์กับแอปในผลการค้นหา Google Assistant และ Smart Lock for Passwords โปรโตคอลนี้ใช้การยืนยันตัวตนแบบเข้ารหัส: ใน assetlinks.json จะระบุลายเซ็น SHA256 ของใบรับรองการลงนามของแอป ซึ่งช่วยป้องกันการปลอมแปลง

กระบวนการทำงานของ App Link ประกอบด้วยสามขั้นตอน: การยืนยัน Digital Asset Links การประมวลผลผ่าน Intent Filter และการเปลี่ยนเส้นทางอัตโนมัติ แต่ละขั้นตอนเป็นสิ่งที่จำเป็น หากการยืนยันล้มเหลว Android จะแสดงกล่องโต้ตอบการเลือก — deep link ดังกล่าวทำงานปกติแต่ไม่มีข้อได้เปรียบของการเปลี่ยนผ่านอัตโนมัติ

Digital Asset Links (assetlinks.json)

Asset Links คือไฟล์ JSON ที่วางบนเซิร์ฟเวอร์ที่ https://domain/.well-known/assetlinks.json ไฟล์ประกอบด้วยอาร์เรย์ของออบเจกต์ที่มีฟิลด์: relation (อาร์เรย์ของสตริงที่อธิบายประเภทความสัมพันธ์), target (ออบเจกต์ที่มี namespace และ package_name ของแอป พร้อมด้วย sha256_cert_fingerprints — อาร์เรย์ของลายเซ็น SHA256 ของใบรับรองการลงนาม)

json
// assetlinks.json — การกำหนดค่า App Link ขั้นต่ำ
[{
    "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
        "namespace": "android_app",
        "package_name": "com.example.app",
        "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
        ]
    }
}]

ลายเซ็น SHA256 ได้จากใบรับรองที่ใช้ในการลงนามแอป สำหรับบิลด์ดีบักจะใช้ใบรับรองดีบักมาตรฐานของ Android สำหรับบิลด์รีลีสจะใช้ใบรับรองจาก Google Play Console หรือของคุณเอง สำคัญ: เมื่อเปลี่ยนใบรับรองการลงนาม (เช่น เมื่อย้ายไปใช้ App Signing by Google Play) จำเป็นต้องอัปเดต assetlinks.json บนเซิร์ฟเวอร์ ไม่เช่นนั้น App Link จะหยุดทำงาน

Intent Filter และการยืนยัน

Android ตรวจสอบ App Link เมื่อคลิกลิงก์ครั้งแรก ระบบดาวน์โหลด assetlinks.json จากเซิร์ฟเวอร์ เปรียบเทียบ package_name และลายเซ็น SHA256 กับใบรับรองของแอปที่ติดตั้งไว้ หากข้อมูลตรงกัน Android จะทำเครื่องหมาย Intent Filter ว่ายืนยันแล้ว และลิงก์ถัดไปทั้งหมดไปยังโดเมนนี้จะเปิดโดยอัตโนมัติโดยไม่ต้องมีกล่องโต้ตอบ

xml
// AndroidManifest.xml — Intent Filter สำหรับ App Link
<activity
    android:name=".ui.ProductActivity"
    android:exported="true">
    <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:scheme="https"
            android:host="example.com"
            android:pathPrefix="/product" />
    </intent-filter>
</activity>

autoVerify="true" เป็นแอตทริบิวต์ที่จำเป็นซึ่งสั่งให้ Android ตรวจสอบ assetlinks.json หากไม่มีแอตทริบิวต์นี้ Intent Filter จะไม่ได้รับการยืนยันและ App Link จะไม่เปิดใช้งาน Android รองรับหลาย Intent Filter ใน Activity เดียว — สำหรับโฮสต์ที่แตกต่างกัน ระบบจะตรวจสอบแต่ละโฮสต์แยกกัน การยืนยันจะดำเนินการแบบอะซิงโครนัสและอาจใช้เวลาถึง 20 วินาทีในการคลิกครั้งแรก

การเปลี่ยนเส้นทางอัตโนมัติ

หลังจากการยืนยันสำเร็จ Android จะเปิดแอปโดยอัตโนมัติเมื่อคลิกลิงก์ใดก็ตามที่ตรงกับ Intent Filter ที่ยืนยันแล้ว ผู้ใช้ไม่เห็นกล่องโต้ตอบการเลือก — แอปเปิดทันที หากไม่ได้ติดตั้งแอป ลิงก์จะเปิดในเบราว์เซอร์ (เหมือนหน้าเว็บทั่วไป) นี่คือประสบการณ์ผู้ใช้ที่เหมาะ: การเปลี่ยนผ่านที่ราบรื่นโดยไม่ต้องดำเนินการที่ไม่จำเป็น

สำคัญ: การเปลี่ยนเส้นทางอัตโนมัติ ทำงานเฉพาะกับสคีมา https เท่านั้น App Link ไม่รองรับ http (โปรโตคอลที่ไม่ปลอดภัย) หากผู้ใช้เปิดลิงก์ http ด้วยตนเอง (เช่น จาก SMS) Android จะไม่ทำการยืนยันและแสดงกล่องโต้ตอบการเลือก ขอแนะนำให้ใช้ https สำหรับลิงก์ทั้งหมดที่นำไปยังแอปและกำหนดค่าการเปลี่ยนเส้นทาง HTTP ไปยัง HTTPS บนเซิร์ฟเวอร์

App Link คือวิวัฒนาการของ Deep Link บน Android ไม่ใช่การแทนที่ ความแตกต่างระหว่างทั้งสองนั้นเป็นพื้นฐาน Deep Link ปกติ (Custom URL Scheme) ทำงานผ่าน Intent Filter ด้วยสคีมาแบบกำหนดเอง (myapp://) และไม่มี autoVerify Android ไม่ตรวจสอบว่าแอปเชื่อมโยงกับสคีมานี้จริงหรือไม่ — แอปใด ๆ ก็สามารถลงทะเบียน myapp:// และสกัดกั้นลิงก์ได้

App Link แก้ปัญหาสามประการของ Deep Link ประการแรก: ความปลอดภัย — การยืนยันผ่าน Digital Asset Links ป้องกันการสกัดกั้นลิงก์ ประการที่สอง: ประสบการณ์ผู้ใช้ — การไม่มีกล่องโต้ตอบการเลือกเพิ่มอัตราการแปลงไปยังเป้าหมายได้ 20–40% ประการที่สาม: การจัดทำดัชนี — Google จัดทำดัชนี URL https ของ App Link และสามารถแสดงในผลการค้นหาเป็นลิงก์ไปยังเนื้อหาภายในแอป

ความเข้ากันได้: App Link ทำงานบน Android 6.0+ (99% ของอุปกรณ์) สำหรับ Android 5.x (Lollipop) จะใช้ Deep Link ปกติพร้อมกล่องโต้ตอบการเลือก ดังนั้นขอแนะนำให้รองรับทั้งสองกลไก: App Link สำหรับอุปกรณ์สมัยใหม่และ Custom URL Scheme เป็นตัวสำรองสำหรับรุ่นเก่า Intent Filter ที่มี autoVerify="true" ไม่ทำลายความเข้ากันได้ย้อนหลัง — บน Android < 6 แอตทริบิวต์จะถูกละเว้น

คุณลักษณะDeep LinkApp Link
สคีมากำหนดเอง (myapp://)HTTPS (https://domain)
การยืนยันไม่มีassetlinks.json
กล่องโต้ตอบการเลือกแสดงการเปลี่ยนเส้นทางอัตโนมัติ
เวอร์ชัน AndroidAPI 1+API 23+ (6.0+)
การจัดทำดัชนี Googleไม่ใช่ (URL https)

การตั้งค่า App Link ต้องการสามขั้นตอน: การกำหนดค่า Intent Filter ในแมนิเฟสต์ การวาง assetlinks.json บนเซิร์ฟเวอร์ และการตรวจสอบการยืนยัน ขั้นตอนแรกคือเพิ่ม Intent Filter ด้วย android:autoVerify="true" ใน AndroidManifest.xml สิ่งสำคัญคือต้องระบุสคีมา https โฮสต์ และเส้นทางที่แอปควรจัดการ เส้นทางสามารถมีไวลด์การ์ด (*) สำหรับโฟลเดอร์ย่อย

ขั้นตอนที่สอง คือการสร้าง assetlinks.json ไฟล์สามารถสร้างผ่าน Android Studio (Tools → App Links Assistant) ผู้ช่วยยังช่วยในการดีบักและทดสอบอีกด้วย ไฟล์ถูกวางบนเซิร์ฟเวอร์ที่ /.well-known/assetlinks.json เซิร์ฟเวอร์ต้องส่งคืน Content-Type: application/json และเข้าถึงได้ผ่าน HTTPS โดยไม่มีการเปลี่ยนเส้นทาง Google Play Console ยังแสดงสถานะการยืนยัน App Link ในส่วน Publishing

  1. เพิ่ม Intent Filter ด้วย android:autoVerify="true" ใน AndroidManifest.xml
  2. รับ ลายเซ็น SHA256 ของใบรับรอง (keytool หรือ App Links Assistant)
  3. สร้าง assetlinks.json ด้วย package_name และ sha256_cert_fingerprints
  4. วาง ไฟล์ที่ /.well-known/assetlinks.json บนเซิร์ฟเวอร์ HTTPS
  5. ตรวจสอบ การยืนยันผ่าน adb: adb shell dumpsync domain_verification

การทดสอบ — ขั้นตอนที่สาม ใช้ adb เพื่อตรวจสอบ: คำสั่ง adb shell am start -W -a android.intent.action.VIEW -d “https://example.com/product/42” เปิดแอป หากเปิดเบราว์เซอร์แทนแอป ให้ตรวจสอบ assetlinks.json และ autoVerify Android Studio App Links Assistant มีเครื่องมือทดสอบในตัว: มันแสดงสถานะการยืนยันสำหรับแต่ละโดเมนและเส้นทาง สำหรับการทดสอบอัตโนมัติ ให้ใช้ Android Testing Library กับ Intent Matcher

คุณสมบัติการทำงาน

Android 12 (API 31) นำการเปลี่ยนแปลงในการจัดการ App Link เพิ่มการยืนยันเฉพาะโดเมนใหม่: ระบบตรวจสอบแต่ละลิงก์ทีละรายการ ไม่ใช่ทั้ง Intent Filter ซึ่งช่วยเพิ่มความปลอดภัย แต่ต้องอัปเดตไฟล์ assetlinks.json เมื่อเพิ่มเส้นทางใหม่ Android 12 ยังแนะนำ Android App Links Assistant ที่มาพร้อมกับ ADB — คำสั่งสำหรับจัดการการยืนยันผ่านเชลล์

หลายโดเมน เป็นสถานการณ์ทั่วไปสำหรับการผลิต แอปสามารถจัดการลิงก์จาก example.com, m.example.com และ example.org แต่ละโดเมนต้องมี assetlinks.json แยกต่างหากบนเซิร์ฟเวอร์ที่เกี่ยวข้อง ในแมนิเฟสต์จะเพิ่มหลาย Intent Filter — หนึ่งตัวต่อโดเมน ทั้งหมดต้องเข้าถึงได้ผ่าน HTTPS และผ่านการยืนยันอย่างอิสระ

App Link และ Jetpack Navigation เป็นวิธีที่แนะนำในการจัดการ App Link ในแอป Android สมัยใหม่ Jetpack Navigation รองรับ deep link แบบประกาศใน nav_graph.xml หรือผ่าน NavDeepLinkRequest ซึ่งช่วยลดความซับซ้อนของการนำทาง: นักพัฒนาอธิบายว่าหน้าจอใดเปิดสำหรับ URL ที่กำหนด และคอมโพเนนต์ Navigation จะจัดการ Intent และเรียกคืนสแต็กการนำทางเอง Google แนะนำให้ใช้ Jetpack Navigation สำหรับ App Link

kotlin
// การประมวลผล App Link ผ่าน Jetpack Navigation
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        handleDeepLink(intent)
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleDeepLink(intent)
    }

    private fun handleDeepLink(intent: Intent) {
        intent.data?.let { uri ->
            navController.handleDeepLink(NavDeepLinkRequest
                .Builder
                .fromUri(uri)
                .build()
            )
        }
    }
}

Google Play Store ตรวจสอบ App Link เมื่อเผยแพร่ หากแมนิเฟสต์มี Intent Filter ที่มี autoVerify แต่ assetlinks.json ไม่พร้อมใช้งานหรือไม่ถูกต้อง Google Play อาจปฏิเสธการอัปเดตพร้อมคำเตือน ในคอนโซลนักพัฒนา (Policy and Programs → App Links) จะแสดงสถานะการยืนยันของแต่ละโดเมน ก่อนเผยแพร่ควรตรวจสอบสถานะเสมอ — การแก้ไขหลังจากการปฏิเสธการอัปเดตทำให้การปล่อยล่าช้า

คำถามที่พบบ่อย

App Link แตกต่างจาก Deep Link บน Android อย่างไร?

App Link คือ Deep Link ที่มีการยืนยันผ่าน Digital Asset Links ความแตกต่างหลัก: App Link ใช้สคีมา https แทนสคีมาแบบกำหนดเอง ไม่แสดงกล่องโต้ตอบการเลือก และถูกจัดทำดัชนีโดย Google Deep Link ปกติทำงานบน Android ทุกเวอร์ชัน แต่ต้องเลือกแอปด้วยตนเอง

ควรวาง assetlinks.json ที่ไหน?

ไฟล์ วางที่รากของเซิร์ฟเวอร์ HTTPS ที่ /.well-known/assetlinks.json เซิร์ฟเวอร์ต้องส่งคืน Content-Type: application/json ควรอัปเดตไฟล์เมื่อเปลี่ยนใบรับรองการลงนามหรือเพิ่มโดเมนใหม่

ทำไม App Link ไม่เปิดแอปโดยอัตโนมัติ?

สาเหตุหลัก: ไม่มี android:autoVerify="true" ใน Intent Filter, assetlinks.json ไม่พร้อมใช้งานผ่าน HTTPS, ลายเซ็น SHA256 ไม่ถูกต้อง, ใบรับรองการลงนามแตกต่างกัน (debug vs release) ตรวจสอบสถานะการยืนยันผ่าน adb shell dumpsync domain_verification

สามารถใช้ App Link โดยไม่มีโดเมนของตนเองได้หรือไม่?

ไม่ได้ — App Link ต้องใช้เซิร์ฟเวอร์ HTTPS ที่มี assetlinks.json ที่เข้าถึงได้ หากคุณไม่มีโดเมน ให้ใช้ Firebase Hosting หรือ GitHub Pages เพื่อโฮสต์ไฟล์ ทางเลือก: Custom URL Scheme (ไม่มีการยืนยัน) หรือ Firebase Dynamic Links

App Link ทำงานบน Android 5 หรือไม่?

ไม่ได้ — App Link รองรับบน Android 6.0 (API 23) ขึ้นไป บน Android 5 Intent Filter ที่มี android:autoVerify="true" จะละเว้นแอตทริบิวต์และทำงานเป็น Deep Link ปกติพร้อมกล่องโต้ตอบการเลือก ขอแนะนำให้รองรับทั้งสองกลไกเพื่อความเข้ากันได้ย้อนหลัง

สรุป

  • App Link — วิวัฒนาการของ Deep Link สำหรับ Android: ลิงก์ https ที่เปลี่ยนไปยังแอปโดยอัตโนมัติ
  • Digital Asset Links — การยืนยันตัวตนแบบเข้ารหัสผ่าน assetlinks.json บนเซิร์ฟเวอร์
  • ลายเซ็น SHA256 ของใบรับรองการลงนาม — องค์ประกอบสำคัญที่เชื่อมโยงนักพัฒนากับโดเมน
  • android:autoVerify="true" — แอตทริบิวต์ Intent Filter ที่จำเป็นสำหรับการเปิดใช้งาน App Link
  • ความปลอดภัย — App Link ป้องกันการสกัดกั้นลิงก์โดยแอปของบุคคลที่สาม
  • Google Play Store ตรวจสอบการยืนยัน App Link เมื่อเผยแพร่และปฏิเสธหากมีข้อผิดพลาด
  • Jetpack Navigation — วิธีที่แนะนำในการจัดการ App Link ด้วย deep link แบบประกาศ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม