สร้าง Deep Link

การทำ Deep Link ช่วยให้คุณนำผู้ใช้ไปยังแอปโดยตรงจากเว็บเบราว์เซอร์ การแจ้งเตือน โซเชียลมีเดีย โฆษณา และแหล่งที่มาอื่นๆ Deep Link ช่วยให้การเปลี่ยนจากแอปหนึ่งไปยังอีกแอปหนึ่งและจากเว็บไปยังแอปเป็นไปอย่างราบรื่น ซึ่งอาจช่วยเพิ่มความผูกพันผ่านเนื้อหาที่กำหนดเป้าหมายและเกี่ยวข้องกับบริบท

คู่มือนี้อธิบายวิธีการทำงานของการทำ Deep Link รวมถึงวิธีสร้างและทดสอบ Deep Link ไปยังเนื้อหา

สำหรับ Deep Link ที่อ้างอิงเว็บไซต์หรือโดเมนของคุณเอง เราขอแนะนำให้ใช้ App Link ซึ่งมอบประสบการณ์การใช้งานที่ราบรื่นและเชื่อถือได้แก่ผู้ใช้

วิธีการทำงานของการทำ Deep Link

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

เมื่อผู้ใช้แตะลิงก์ในขณะรันไทม์ Android จะทริกเกอร์ Intent และพยายามเปลี่ยนเส้นทางไปยังแอป เนื่องจากแอปหลายแอปสามารถประกาศตัวกรอง Intent ที่ตรงกับ URI ที่กำหนดได้ Android จึงดำเนินการต่อไปนี้ตามลำดับเพื่อเปลี่ยนเส้นทาง Intent

  1. เปิดแอปเริ่มต้นของผู้ใช้ที่จัดการ URI ได้ หากมีการกำหนดไว้
  2. เปิดแอปเดียวที่พร้อมใช้งานซึ่งจัดการ URI ได้
  3. อนุญาตให้ผู้ใช้เลือกแอปจาก กล่องโต้ตอบที่มีคำอธิบาย

ซึ่งหมายความว่าแม้ตัวกรอง Intent จะตรงกับ URI ที่กำหนด แต่ก็ไม่มีการรับประกันว่าระบบจะเปลี่ยนเส้นทาง Intent ของ Deep Link ไปยังแอปของคุณ ผู้ใช้มีบทบาทสำคัญในการจัดการแอปที่จะจัดการ Intent ซึ่งช่วยให้ผู้ใช้ควบคุมและมีตัวเลือก หากต้องการควบคุม Deep Link ไปยังเว็บไซต์และโดเมนของคุณเองมากขึ้น ให้ลองใช้ App Link

กล่องโต้ตอบที่มีคำอธิบายของ Android ช่วยให้ผู้ใช้เห็นแอปที่ติดตั้งทั้งหมดซึ่งลงทะเบียนเพื่อจัดการ Intent ของ Deep Link นอกจากนี้ ผู้ใช้ยังเลือกแอปให้เป็นแอปเริ่มต้นสำหรับลิงก์ประเภทนี้ได้ด้วย เมื่อผู้ใช้ตั้งค่าเริ่มต้นแล้ว ระบบจะไม่แสดงกล่องโต้ตอบสำหรับ Intent ที่เฉพาะเจาะจงนั้นอีกต่อไป และแอปที่เลือกจะเปิดขึ้นโดยอัตโนมัติ

กล่องโต้ตอบการแยกความกำกวมของระบบ Android ที่แสดงตัวเลือกแอปสำหรับลิงก์
รูปที่ 1 กล่องโต้ตอบที่มีคำอธิบาย

ลักษณะการทำงานของกล่องโต้ตอบที่มีคำอธิบายมีการพัฒนาไปตามเวอร์ชัน Android เช่น ใน Android 12 ขึ้นไป เว็บลิงก์ที่ไม่ใช่ App Link ที่ยืนยันแล้วจะเปิดในเว็บเบราว์เซอร์โดยค่าเริ่มต้น ในขณะที่ในเวอร์ชันก่อนหน้า กล่องโต้ตอบที่มีคำอธิบายอาจปรากฏขึ้นหากแอปจัดการเว็บลิงก์ได้

ประเภทของลิงก์ในรายละเอียด

Deep Link ที่คุณรองรับใน Android มี 3 ประเภท ได้แก่

  • Deep Link ที่กำหนดเอง: เป็น Deep Link ที่ใช้สคีม URI ที่กำหนดเอง (เช่น example://products/123) เพื่อนำผู้ใช้ไปยังเนื้อหาที่เฉพาะเจาะจงภายในแอปโดยตรง ซึ่งมีประสิทธิภาพสำหรับการนำทางภายในหรือลิงก์จากแหล่งที่มาที่คุณควบคุม แต่ไม่ใช่เว็บลิงก์มาตรฐานและอาจยังทริกเกอร์กล่องโต้ตอบที่มีคำอธิบายได้หากแอปอื่นลงทะเบียน Scheme ที่กำหนดเองเดียวกัน
  • เว็บลิงก์: เป็น Deep Link ที่ใช้รูปแบบ http และ https มาตรฐาน ซึ่งมีความหลากหลายมากกว่าเนื่องจากเป็น URL มาตรฐาน แต่ใน Android 12 ขึ้นไป ลิงก์เหล่านี้จะทริกเกอร์กล่องโต้ตอบที่มีคำอธิบายเกือบตลอดเวลา ซึ่งหมายความว่าเว็บเบราว์เซอร์ของผู้ใช้มีแนวโน้มที่จะจัดการลิงก์เหล่านี้โดยค่าเริ่มต้น แทนที่จะเปลี่ยนเส้นทางไปยังแอปของคุณ
  • App Link: มีให้บริการตั้งแต่ Android 6.0 (ระดับ API 23) เป็น เว็บลิงก์ที่ยืนยันแล้ว คุณสามารถพิสูจน์ต่อระบบ Android ว่าคุณเป็นเจ้าของโดเมนผ่านกระบวนการเชื่อมโยงเว็บไซต์ เมื่อยืนยันแล้ว ระบบจะเปลี่ยนเส้นทางลิงก์สำหรับโดเมนนั้นไปยังแอปของคุณโดยอัตโนมัติ โดยข้ามกล่องโต้ตอบที่มีคำอธิบายไปเลย ซึ่งจะสร้างประสบการณ์การใช้งานที่เชื่อถือได้และราบรื่นสำหรับผู้ใช้

เพิ่มตัวกรอง Intent สำหรับลิงก์ขาเข้า

หากต้องการสร้างลิงก์ไปยังเนื้อหาในแอป ให้เพิ่มตัวกรอง Intent ที่มีองค์ประกอบและค่าแอตทริบิวต์ต่อไปนี้ในไฟล์ Manifest

<action>

ระบุการดำเนินการผ่าน Intent ที่ชื่อ ACTION_VIEW เพื่อให้เข้าถึงตัวกรอง Intent ได้จาก Google Search

<data>

เพิ่มแท็ก <data> อย่างน้อย 1 รายการ ซึ่งแต่ละรายการแสดงรูปแบบ URI ที่ เปลี่ยนเป็นกิจกรรม แท็ก <data> ต้องมีแอตทริบิวต์ android:scheme อย่างน้อย

คุณสามารถเพิ่มแอตทริบิวต์เพิ่มเติมเพื่อปรับแต่งประเภท URI ที่กิจกรรมยอมรับ เช่น คุณอาจมีกิจกรรมหลายรายการที่ยอมรับ URI ที่คล้ายกัน แต่แตกต่างกันตามเส้นทาง ในกรณีนี้ ให้ใช้แอตทริบิวต์ android:path หรือตัวแปร pathPattern หรือ pathPrefix เพื่อ แยกความแตกต่างของกิจกรรมที่ระบบควรเปิดสำหรับเส้นทาง URI ที่แตกต่างกัน

<category>

ใส่หมวดหมู่ 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 ที่มี 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

ตั้งแต่ Android 17 เป็นต้นไป คุณยังใช้แฟล็ก --debug-link กับ am start เพื่อวินิจฉัยวิธีที่ระบบเปลี่ยน URL และตรวจสอบตัวกรอง Intent หรือกฎ App Link แบบไดนามิกที่ตรงกันได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อวินิจฉัยการเปลี่ยนลิงก์ด้วยแฟล็ก debug-link

การประกาศไฟล์ Manifest และตัวแฮนเดิล Intent ที่คุณตั้งค่าไว้จะกำหนดการเชื่อมต่อระหว่างแอปกับเว็บไซต์ รวมถึงสิ่งที่ต้องทำกับลิงก์ขาเข้า อย่างไรก็ตาม หากต้องการให้ระบบถือว่าแอปของคุณเป็นตัวแฮนเดิลเริ่มต้นสำหรับ URI ชุดหนึ่ง คุณต้องขอให้ระบบยืนยันการเชื่อมต่อนี้ด้วย หัวข้อการยืนยัน App Link อธิบายวิธีใช้การยืนยันนี้

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Intent และ App Link ได้ที่แหล่งข้อมูลต่อไปนี้