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

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

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

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

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

เพิ่มตัวกรอง Intent สำหรับลิงก์ขาเข้า

หากต้องการสร้างลิงก์ไปยังเนื้อหาแอป ให้เพิ่มตัวกรอง Intent ที่ มีองค์ประกอบและค่าแอตทริบิวต์ต่อไปนี้ในไฟล์ Manifest

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

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