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

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

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

ทำตามขั้นตอนด้านล่างเพื่อสร้างและทดสอบลิงก์ไปยังเนื้อหาของคุณ คุณยังสามารถใช้ ผู้ช่วยเรื่องลิงก์แอปใน 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” แก้ไขกิจกรรมนี้ทั้ง 2 รายการ

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