สร้าง Deep Link สำหรับเนื้อหาแอป

เมื่อลิงก์ที่คลิกหรือคําขอแบบเป็นโปรแกรมเรียกใช้ Intent ของ URI ของเว็บ ระบบ Android จะพยายามดําเนินการต่อไปนี้ทีละรายการตามลําดับจนกว่าคําขอจะสําเร็จ

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

ทำตามขั้นตอนด้านล่างเพื่อสร้างและทดสอบลิงก์ไปยังเนื้อหา นอกจากนี้ คุณยังใช้ App Links Assistant ใน Android Studio เพื่อเพิ่ม Android App Link ได้ด้วย

หมายเหตุ: ตั้งแต่ Android 12 (API ระดับ 31) เป็นต้นไป อินเทนต์ของเว็บทั่วไปจะแก้ไขเป็นกิจกรรมในแอปก็ต่อเมื่อแอปได้รับอนุมัติสำหรับโดเมนที่เฉพาะเจาะจงซึ่งมีอยู่ในอินเทนต์ของเว็บนั้น หากแอปไม่ได้รับอนุมัติสำหรับโดเมนดังกล่าว อินเทนต์ของเว็บจะแก้ไขแอปเบราว์เซอร์เริ่มต้นของผู้ใช้แทน

เพิ่มตัวกรอง 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 ด้วย ซึ่งจะช่วยให้แอปตอบสนองต่อ 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 ควรนำผู้ใช้ไปยังเนื้อหาโดยตรง โดยไม่มีข้อความแจ้ง หน้าคั่นระหว่างหน้า หรือการลงชื่อเข้าใช้ ตรวจสอบว่าผู้ใช้ดูเนื้อหาแอปได้แม้ว่าจะไม่เคยเปิดแอปพลิเคชันมาก่อน คุณสามารถแจ้งผู้ใช้เกี่ยวกับการโต้ตอบที่ตามมา หรือเมื่อเปิดแอปจาก Launcher ได้
  • ทำตามคำแนะนำการออกแบบที่อธิบายไว้ในการไปยังส่วนต่างๆ ด้วยปุ่มย้อนกลับและขึ้นเพื่อให้แอปตรงกับความต้องการของผู้ใช้สำหรับการไปยังส่วนต่างๆ ย้อนกลับหลังจากที่เข้าสู่แอปผ่าน Deep Link

ทดสอบ Deep Link

คุณสามารถใช้การแก้ไขข้อบกพร่องของ Android กับเครื่องมือจัดการกิจกรรม (am) เพื่อทดสอบว่าตัวกรอง 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 บทเรียนถัดไปจะอธิบายวิธีใช้การยืนยันนี้

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