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

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

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

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

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

เพิ่มตัวกรอง 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 และลิงก์แอป โปรดดูแหล่งข้อมูลต่อไปนี้