การทำ Deep Link ช่วยให้คุณนำผู้ใช้ไปยังแอปได้โดยตรงจากเว็บเบราว์เซอร์ การแจ้งเตือน โซเชียลมีเดีย โฆษณา และแหล่งที่มาอื่นๆ Deep Link ช่วยให้การเปลี่ยนจากแอปหนึ่งไปยังอีกแอปหนึ่งและจากเว็บไปยังแอปเป็นไปอย่างราบรื่น ซึ่งอาจช่วยเพิ่มการมีส่วนร่วมผ่านเนื้อหาที่กำหนดเป้าหมายและเกี่ยวข้องกับบริบท
คู่มือนี้อธิบายวิธีการทำงานของการทำ Deep Link รวมถึงวิธีสร้างและทดสอบ Deep Link ไปยังเนื้อหา
สำหรับ Deep Link ที่อ้างอิงเว็บไซต์หรือโดเมนของคุณเอง เราขอแนะนำให้ใช้ App Link ซึ่งมอบประสบการณ์การใช้งานที่ราบรื่นและเชื่อถือได้แก่ผู้ใช้
วิธีการทำงานของการทำ Deep Link
การทำ Deep Link เป็นความสามารถของระบบ Android โดยทั่วไป ซึ่งรองรับในทุกเวอร์ชันและในทุกอุปกรณ์ โดยจะใช้ประโยชน์จากระบบ Intent ของ Android เพื่อกำหนดเส้นทาง Deep Link ไปยังแอปที่สนใจ แอปที่ต้องการจัดการ URI ของ Deep Link ที่เฉพาะเจาะจงจะประกาศตัวกรอง Intent ที่ตรงกันในไฟล์ Manifest ของแอป
เมื่อผู้ใช้แตะลิงก์ในขณะรันไทม์ Android จะทริกเกอร์ Intent และพยายามกำหนดเส้นทางไปยังแอป เนื่องจากแอปหลายแอปสามารถประกาศตัวกรอง Intent ที่ตรงกับ URI ที่กำหนดได้ Android จึงดำเนินการต่อไปนี้ตามลำดับเพื่อกำหนดเส้นทาง Intent
- เปิดแอปเริ่มต้นของผู้ใช้ที่จัดการ URI ได้ หากมีการกำหนดไว้
- เปิดแอปเดียวที่พร้อมใช้งานซึ่งจัดการ URI ได้
- อนุญาตให้ผู้ใช้เลือกแอปจาก กล่องโต้ตอบที่มีคำอธิบาย
ซึ่งหมายความว่าแม้ตัวกรอง Intent จะตรงกับ URI ที่กำหนด แต่ก็ไม่มีการรับประกันว่าระบบจะกำหนดเส้นทาง Intent ของ Deep Link ไปยังแอปของคุณ ผู้ใช้มีบทบาทสำคัญในการจัดการแอปที่จะจัดการ Intent ซึ่งช่วยให้ผู้ใช้ควบคุมและมีตัวเลือก หากต้องการควบคุม Deep Link ไปยังเว็บไซต์และโดเมนของคุณเองมากขึ้น ให้ลองใช้ App Link
กล่องโต้ตอบที่มีคำอธิบายของ Android ช่วยให้ผู้ใช้เห็นแอปที่ติดตั้งทั้งหมดซึ่งลงทะเบียนเพื่อจัดการ Intent ของ Deep Link นอกจากนี้ ผู้ใช้ยังเลือกแอปให้เป็นค่าเริ่มต้นสำหรับลิงก์ประเภทนี้ได้ด้วย เมื่อผู้ใช้ตั้งค่าเริ่มต้นแล้ว ระบบจะไม่แสดงกล่องโต้ตอบสำหรับ Intent ที่เฉพาะเจาะจงนั้นอีกต่อไป และแอปที่เลือกจะเปิดขึ้นโดยอัตโนมัติ

รูปที่ 1 กล่องโต้ตอบที่มีคำอธิบาย
ลักษณะการทำงานของกล่องโต้ตอบที่มีคำอธิบายมีการพัฒนาไปตามเวอร์ชัน Android เช่น ใน Android 12 ขึ้นไป เว็บลิงก์ที่ไม่ใช่ App Link ที่ยืนยันแล้วจะเปิดในเว็บเบราว์เซอร์โดยค่าเริ่มต้น ในขณะที่ในเวอร์ชันก่อนหน้า กล่องโต้ตอบที่มีคำอธิบายอาจปรากฏขึ้นหากแอปจัดการเว็บลิงก์ได้
หมายเหตุ: ตั้งแต่ Android 12 (ระดับ API 31) เป็นต้นไป Intent ของเว็บทั่วไปจะเปลี่ยนเป็นกิจกรรมในแอปของคุณก็ต่อเมื่อแอปได้รับการอนุมัติสำหรับโดเมนที่เฉพาะเจาะจงซึ่งอยู่ใน Intent ของเว็บนั้น หากแอปไม่ได้รับการอนุมัติสำหรับโดเมน Intent ของเว็บจะเปลี่ยนเป็นแอปเบราว์เซอร์เริ่มต้นของผู้ใช้แทน
ประเภทของลิงก์ในรายละเอียด
มี Deep Link 3 ประเภทที่คุณรองรับได้ใน Android
- Deep Link ที่กำหนดเอง: เป็น Deep Link ที่ใช้ Scheme URI ที่กำหนดเอง (เช่น
example://products/123) เพื่อนำผู้ใช้ไปยังเนื้อหาที่เฉพาะเจาะจงภายในแอปโดยตรง ซึ่งมีประสิทธิภาพสำหรับการไปยังส่วนต่างๆ ภายในหรือลิงก์จากแหล่งที่มาที่คุณควบคุม แต่ไม่ใช่เว็บลิงก์มาตรฐานและอาจยังทริกเกอร์กล่องโต้ตอบที่มีคำอธิบายได้หากแอปอื่นลงทะเบียน Scheme ที่กำหนดเองเดียวกัน - เว็บลิงก์: เป็น Deep Link ที่ใช้รูปแบบ
httpและhttpsมาตรฐาน ซึ่งมีความหลากหลายมากกว่าเนื่องจากเป็น URL มาตรฐาน แต่ใน Android 12 ขึ้นไป เว็บลิงก์จะทริกเกอร์กล่องโต้ตอบที่มีคำอธิบายเกือบตลอดเวลา ซึ่งหมายความว่าเว็บลิงก์มีแนวโน้มที่จะได้รับการจัดการโดยเว็บเบราว์เซอร์ของผู้ใช้โดยค่าเริ่มต้น แทนที่จะกำหนดเส้นทางไปยังแอปของคุณ - App Link: พร้อมใช้งานตั้งแต่ Android 6.0 (ระดับ API 23) เป็นเว็บลิงก์ที่ยืนยันแล้ว คุณสามารถพิสูจน์ให้ระบบ Android เห็นว่าคุณเป็นเจ้าของโดเมนผ่านกระบวนการเชื่อมโยงเว็บไซต์ เมื่อยืนยันแล้ว ระบบจะกำหนดเส้นทางลิงก์สำหรับโดเมนนั้นไปยังแอปของคุณโดยอัตโนมัติ โดยข้ามกล่องโต้ตอบที่มีคำอธิบายไปเลย ซึ่งจะสร้างประสบการณ์การใช้งานที่เชื่อถือได้และราบรื่นสำหรับผู้ใช้
เพิ่มตัวกรอง Intent สำหรับลิงก์ขาเข้า
หากต้องการสร้างลิงก์ไปยังเนื้อหาแอป ให้เพิ่มตัวกรอง Intent ที่มีองค์ประกอบและค่าแอตทริบิวต์ต่อไปนี้ในไฟล์ Manifest
ระบุการดำเนินการผ่าน Intent ที่ชื่อ ACTION_VIEW เพื่อให้เข้าถึงตัวกรอง Intent ได้จาก Google Search
เพิ่มแท็ก <data> อย่างน้อย 1 รายการ ซึ่งแต่ละรายการแสดงรูปแบบ URI ที่
เปลี่ยนเป็นกิจกรรม แท็ก <data> ต้องมีแอตทริบิวต์
android:scheme อย่างน้อย
คุณสามารถเพิ่มแอตทริบิวต์เพิ่มเติมเพื่อปรับแต่งประเภท URI ที่กิจกรรมยอมรับ เช่น คุณอาจมีกิจกรรมหลายรายการที่ยอมรับ URI ที่คล้ายกัน แต่แตกต่างกันเพียงชื่อเส้นทาง ในกรณีนี้ ให้ใช้แอตทริบิวต์
android:path หรือตัวแปร pathPattern หรือ pathPrefix เพื่อ
แยกความแตกต่างของกิจกรรมที่ระบบควรเปิดสำหรับเส้นทาง URI ที่แตกต่างกัน
ใส่หมวดหมู่ BROWSABLE ซึ่งจำเป็นเพื่อให้เข้าถึงตัวกรอง Intent ได้จากเว็บเบราว์เซอร์ หากไม่มีหมวดหมู่นี้ การคลิกลิงก์ในเบราว์เซอร์จะไม่สามารถเปลี่ยนเป็นแอปของคุณได้
นอกจากนี้ ให้ใส่หมวดหมู่ DEFAULT ด้วย ซึ่งจะช่วยให้แอปตอบสนองต่อ Implicit Intent ได้ หากไม่มีหมวดหมู่นี้ จะเริ่มกิจกรรมได้ก็ต่อเมื่อ Intent ระบุชื่อคอมโพเนนต์ของแอป
ข้อมูลโค้ด XML ต่อไปนี้แสดงวิธีระบุตัวกรอง Intent ในไฟล์ Manifest สำหรับการทำ Deep Link ทั้ง URI "example://gizmos" และ
"http://www.example.com/gizmos" จะเปลี่ยนเป็นกิจกรรมนี้
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
โปรดสังเกตว่าตัวกรอง Intent 2 รายการนี้แตกต่างกันเฉพาะองค์ประกอบ <data> แม้ว่า
คุณจะใส่องค์ประกอบ <data> หลายรายการในตัวกรองเดียวกันได้ แต่
คุณควรสร้างตัวกรองแยกกันเมื่อต้องการประกาศ
URL ที่ไม่ซ้ำกัน (เช่น การผสมผสานระหว่าง scheme กับ host ที่เฉพาะเจาะจง) เนื่องจาก
องค์ประกอบ <data> หลายรายการในตัวกรอง Intent เดียวกันจะผสานรวม
กันเพื่อพิจารณาการเปลี่ยนแปลงทั้งหมดของแอตทริบิวต์ที่รวมกัน เช่น โปรดคำนึงถึงสิ่งต่อไปนี้
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
ดูเหมือนว่าตัวกรองนี้จะรองรับเฉพาะ https://www.example.com และ app://open.my.app แต่จริงๆ แล้วรองรับ 2 รายการนี้ รวมถึง app://www.example.com และ https://open.my.app ด้วย
ข้อควรระวัง: หากกิจกรรมหลายรายการมีตัวกรอง Intent ที่เปลี่ยนเป็น Android App Link ที่ยืนยันแล้วเดียวกัน ก็ไม่มีการรับประกันว่ากิจกรรมใดจะ จัดการลิงก์
เมื่อคุณเพิ่มตัวกรอง Intent ที่มี URI สำหรับเนื้อหากิจกรรมลงในไฟล์ Manifest ของแอปแล้ว Android จะกำหนดเส้นทาง Intent ที่มี URI ที่ตรงกันไปยังแอปของคุณได้ในขณะรันไทม์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดตัวกรอง Intent ได้ที่หัวข้อ อนุญาตให้แอปอื่นๆ เริ่ม กิจกรรมของคุณ
อ่านข้อมูลจาก Intent ขาเข้า
เมื่อระบบเริ่มกิจกรรมของคุณผ่านตัวกรอง Intent แล้ว คุณสามารถใช้ข้อมูล
ที่ Intent ให้มาเพื่อกำหนดสิ่งที่คุณต้องแสดงผล เรียกใช้เมธอด
getData() และ getAction() เพื่อดึงข้อมูลและ
การดำเนินการที่เชื่อมโยงกับ Intent ขาเข้า คุณสามารถเรียกใช้เมธอดเหล่านี้ได้ทุกเมื่อในระหว่างวงจรการทำงานของกิจกรรม แต่โดยทั่วไปแล้วควรทำในระหว่างการเรียกกลับในช่วงต้นๆ เช่น onCreate() หรือ onStart
ข้อมูลโค้ดต่อไปนี้แสดงวิธีดึงข้อมูลจาก Intent
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
Java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
ทำตามแนวทางปฏิบัติแนะนำต่อไปนี้เพื่อปรับปรุงประสบการณ์การใช้งานของผู้ใช้
- Deep Link ควรนำผู้ใช้ไปยังเนื้อหาโดยตรงโดยไม่มีพรอมต์ หน้าคั่นระหว่างหน้า หรือการเข้าสู่ระบบ ตรวจสอบว่าผู้ใช้เห็นเนื้อหาแอปได้แม้ว่าจะไม่เคยเปิดแอปพลิเคชันมาก่อนก็ตาม คุณสามารถแสดงพรอมต์แก่ผู้ใช้ในการโต้ตอบครั้งต่อๆ ไปหรือเมื่อผู้ใช้เปิดแอปจากตัวเปิดแอป
- ทำตามคำแนะนำการออกแบบที่อธิบายไว้ในหัวข้อการไปยังส่วนต่างๆ ด้วยปุ่มย้อนกลับและปุ่มขึ้น เพื่อให้แอปเป็นไปตามความคาดหวังของผู้ใช้ในการไปยังส่วนต่างๆ ย้อนกลับหลังจากที่ผู้ใช้เข้าแอปผ่าน Deep Link
ทดสอบ Deep Link
คุณสามารถใช้ Android Debug Bridge กับเครื่องมือ Activity Manager (am) เพื่อทดสอบว่า URI ของตัวกรอง Intent ที่คุณระบุสำหรับการทำ Deep Link เปลี่ยนเป็นกิจกรรมบนแอปที่ถูกต้อง คุณสามารถเรียกใช้คำสั่ง adb กับอุปกรณ์หรือโปรแกรมจำลอง
ไวยากรณ์ทั่วไปสำหรับการทดสอบ URI ของตัวกรอง Intent ด้วย adb มีดังนี้
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
ตัวอย่างเช่น คำสั่งต่อไปนี้จะพยายามดูการทำงานของแอปเป้าหมายที่เชื่อมโยงกับ URI ที่ระบุ
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
หมายเหตุ: เมื่อกำหนดคอลเล็กชันของประเภทข้อมูลพื้นฐานในเส้นทาง เช่น
**@Serializable data class Product(val colors: List)** รูปแบบ URL ของ Deep Link ที่สร้างขึ้นโดยอัตโนมัติจะเป็น **basePath?colors={value**} หากคุณพยายาม
ระบุ URI ที่มีพารามิเตอร์การค้นหาหลายรายการ (เช่น,
**basepath?colors=red&colors=blue**) คุณต้องหลีกเลี่ยงเครื่องหมายแอมเพอร์แซนด์
(เช่น, **basepath?colors=red\&colors=blue**)
การประกาศไฟล์ Manifest และตัวแฮนเดิล Intent ที่คุณตั้งค่าไว้จะกำหนดการเชื่อมต่อระหว่างแอปกับเว็บไซต์ รวมถึงสิ่งที่ต้องทำกับลิงก์ขาเข้า อย่างไรก็ตาม หากต้องการให้ระบบถือว่าแอปของคุณเป็นตัวแฮนเดิลเริ่มต้นสำหรับชุด URI คุณต้องขอให้ระบบยืนยันการเชื่อมต่อนี้ด้วย หัวข้อการยืนยัน App Link อธิบายวิธีดำเนินการยืนยันนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Intent และ App Link ได้ที่แหล่งข้อมูลต่อไปนี้
- Intent และตัวกรอง Intent
- อนุญาตให้แอปอื่นๆ เริ่มกิจกรรมของคุณ
- เพิ่ม Android App Link ด้วย Android Studio