การทำ 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 นั้นๆ อีก และแอปที่เลือกจะเปิดขึ้นโดยอัตโนมัติ
ลักษณะการทำงานของกล่องโต้ตอบการแก้ความกำกวมมีการพัฒนาไปตามเวอร์ชัน Android ตัวอย่างเช่น ใน Android 12 ขึ้นไป เว็บลิงก์ที่ไม่ใช่ App Link ที่ได้รับการยืนยันโดยทั่วไปจะเปิดในเว็บเบราว์เซอร์โดยค่าเริ่มต้น ส่วนในเวอร์ชันก่อนหน้า กล่องโต้ตอบเพื่อแก้ความกำกวมอาจปรากฏขึ้นหากแอปสามารถจัดการเว็บลิงก์ได้
ประเภทของ Deep Link
Deep Link ที่คุณรองรับใน Android มี 3 ประเภท ได้แก่
- Deep Link ที่กำหนดเอง: Deep Link เหล่านี้ใช้สคีม URI ที่กำหนดเอง (เช่น
example://products/123) เพื่อนำผู้ใช้ไปยังเนื้อหาที่เฉพาะเจาะจงภายในแอปโดยตรง ซึ่งมีประสิทธิภาพสำหรับการนำทางภายในหรือลิงก์จากแหล่งที่มาที่คุณควบคุม แต่ไม่ใช่เว็บลิงก์มาตรฐานและยังคงเรียกใช้กล่องโต้ตอบเพื่อแก้ความกำกวมได้หากแอปอื่นลงทะเบียนสคีมที่กำหนดเองเดียวกัน - เว็บลิงก์: เป็น 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 ด้วย ซึ่งจะช่วยให้แอปตอบสนองต่อ 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 ที่มี URI สำหรับเนื้อหากิจกรรมลงในไฟล์ Manifest ของแอปแล้ว Android จะกำหนดเส้นทาง Intent ที่มี URI ที่ตรงกันไปยังแอปของคุณได้ที่รันไทม์
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดตัวกรอง Intent ได้ที่อนุญาตให้แอปอื่นๆ เริ่มกิจกรรมของคุณ
อ่านข้อมูลจาก Intent ขาเข้า
เมื่อระบบเริ่มกิจกรรมของคุณผ่านตัวกรอง Intent คุณจะใช้ข้อมูลที่ Intent ให้มาเพื่อกำหนดสิ่งที่คุณต้องแสดงผลได้ เรียกเมธอด getData() และ getAction() เพื่อดึงข้อมูลและการดำเนินการที่เชื่อมโยงกับ Intent ที่เข้ามา คุณเรียกใช้เมธอดเหล่านี้ได้ทุกเมื่อในระหว่างวงจรของกิจกรรม แต่โดยทั่วไปแล้วควรเรียกใช้ระหว่าง Callback ช่วงแรกๆ เช่น 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 ควรนำผู้ใช้ไปยังเนื้อหาโดยตรง โดยไม่มีข้อความแจ้ง หน้าเว็บคั่นระหว่างหน้า หรือการเข้าสู่ระบบ ตรวจสอบว่าผู้ใช้เห็นเนื้อหาของแอปแม้ว่าจะไม่เคยเปิดแอปพลิเคชันมาก่อน คุณสามารถแจ้งผู้ใช้ในการโต้ตอบครั้งต่อๆ ไปหรือเมื่อผู้ใช้เปิดแอปจาก Launcher ได้
- ทำตามคำแนะนำด้านการออกแบบที่อธิบายไว้ในการนำทางด้วยปุ่มย้อนกลับและปุ่มขึ้นเพื่อให้แอปตรงกับความคาดหวังของผู้ใช้สำหรับการนำทางแบบย้อนกลับหลังจากที่ผู้ใช้เข้าสู่แอปผ่าน 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
ตั้งแต่ Android 17 เป็นต้นไป คุณยังใช้แฟล็ก --debug-link กับ am start เพื่อวิเคราะห์วิธีที่ระบบแก้ไข URL และตรวจสอบตัวกรอง Intent ที่ตรงกันหรือกฎ App Link แบบไดนามิกได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่วิเคราะห์การแปลงลิงก์ด้วยแฟล็ก debug-link
การประกาศไฟล์ Manifest และตัวแฮนเดิล Intent ที่คุณตั้งค่าไว้จะกำหนดการเชื่อมต่อระหว่างแอปกับเว็บไซต์ และสิ่งที่ต้องทำกับลิงก์ขาเข้า อย่างไรก็ตาม หากต้องการให้ระบบถือว่าแอปของคุณเป็นตัวแฮนเดิลเริ่มต้นสำหรับชุด URI คุณต้องขอให้ระบบยืนยันการเชื่อมต่อนี้ด้วย ยืนยัน App Link อธิบายวิธีใช้การยืนยันนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Intent และ App Link ได้ที่แหล่งข้อมูลต่อไปนี้
- Intent และตัวกรอง Intent
- อนุญาตให้แอปอื่นๆ เริ่มกิจกรรมของคุณ
- เพิ่ม Android App Link ด้วย Android Studio