สร้าง Deep Link

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

  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

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

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

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

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