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