สร้างอินสแตนซ์ DeepLinkMatcher

หากต้องการแมปอินสแตนซ์ DeepLinkRequest ขาเข้าไปยังคีย์ที่เพิ่มลงใน Back Stack ของแอปได้ ให้กำหนดอินสแตนซ์ DeepLinkMatcher

DeepLinkMatcher เป็นคลาสแอบสแตรกต์ที่มี 2 เมธอด ได้แก่ match และ matchRequest คลาสย่อยต้องใช้ matchRequest ซึ่งรับ DeepLinkRequest และแสดงผล DeepLinkMatcher.MatchResult หาก คำขอตรงกัน หรือ null ในกรณีอื่นๆ

เนื่องจากตัวจับคู่หลายรายการอาจตรงกับคำขอเดียว MatchResult จึงใช้ Comparable เพื่อจัดอันดับผลลัพธ์และเลือกรายการที่ตรงกันมากที่สุด

พารามิเตอร์ประเภท

คลาส DeepLinkMatcher ประกาศพารามิเตอร์ประเภททั่วไป 2 รายการ: DeepLinkMatcher<T : Any, R : DeepLinkMatcher.MatchResult<T>>

  • T : Any: ประเภทคีย์การนำทางปลายทาง (เช่น UserProfileKey หรือ NavKey) ที่แสดงผลเมื่อ Deep Link ตรงกัน
  • R : DeepLinkMatcher.MatchResult<T>: ประเภทย่อย MatchResult เฉพาะ ที่แสดงผลโดย matchRequest และ match

พารามิเตอร์ประเภทที่ 2, R จะเก็บข้อมูลการจับคู่เฉพาะไว้โดยไม่จำเป็นต้องมีการดาวน์แคสต์ที่ไม่ได้ตรวจสอบ

  • StaticKeyDeepLinkMatcher จะผูก R กับ DeepLinkMatcher.MatchResult<T>
  • UriDeepLinkMatcher จะผูก R กับ UriMatchResult โดยจะเก็บ เส้นทางที่แยกวิเคราะห์แล้วและอาร์กิวเมนต์การค้นหาไว้พร้อมกับคะแนนการจับคู่รูปแบบ
  • BackStackMatcher จะผูก R กับ BackStackMatchResult โดยจะเก็บรายการ Back Stack สังเคราะห์ที่สร้างโดย withBackStack ไว้

กรองคำขอก่อน

การติดตั้งใช้งาน DeepLinkMatcher สามารถระบุรายการอินสแตนซ์ DeepLinkMatcher.Filter เพื่อกรองคำขอก่อน ที่จะประเมินได้

ไลบรารีมีฟังก์ชันตัวช่วยในการสร้างตัวกรองทั่วไป ดังนี้

แนวทางนี้ช่วยให้คุณใช้รูปแบบ URI เดียวกันซ้ำสำหรับกิจกรรมต่างๆ ได้ เช่น การดูเทียบกับการแก้ไข

เนื่องจาก Filter เป็นอินเทอร์เฟซฟังก์ชัน (SAM) คุณจึงสร้างตัวกรองโดยใช้นิพจน์แลมบ์ดาได้ด้วย

ใช้ตัวจับคู่ที่ให้มา

ไลบรารีมีการติดตั้งใช้งานมาตรฐาน 3 รายการ:DeepLinkMatcher StaticKeyDeepLinkMatcher, UriDeepLinkMatcher และ BackStackMatcher หากตัวจับคู่เหล่านี้ไม่ตรงตามข้อกำหนดของแอป คุณสามารถสร้างตัวจับคู่ Deep Link ที่กำหนดเองได้

สำหรับ Deep Link พื้นฐานที่ไม่มีอาร์กิวเมนต์ให้แยกออกมา ให้ใช้ StaticKeyDeepLinkMatcher เพื่อจับคู่คำขอที่ตรงตามตัวกรองทั้งหมดที่ระบุ

ตัวอย่างเช่น หากต้องการจัดการ Intent สำหรับ ACTION_APPLICATION_PREFERENCES ให้ทำดังนี้

หากต้องการจับคู่ URI แบบลำดับชั้นกับรูปแบบและแยกอาร์กิวเมนต์ ให้ใช้ UriDeepLinkMatcher ตัวอย่างเช่น คุณสามารถจับคู่ www.example.com/users/{id} เพื่อ แยกอาร์กิวเมนต์ id ลงในคีย์ปลายทาง ดูข้อมูลเพิ่มเติมได้ที่ หัวข้อจับคู่ Deep Link URI

สร้าง Back Stack สังเคราะห์

หากต้องการกำหนดวิธีสร้าง Back Stack สังเคราะห์จากการจับคู่ที่สำเร็จ ให้ใช้ BackStackMatcher ให้เรียกใช้ฟังก์ชันส่วนขยาย withBackStack ใน DeepLinkMatcher อื่นแทนการสร้างอินสแตนซ์ BackStackMatcher โดยตรง withBackStack จะห่อหุ้มตัวรับไว้ใน BackStackMatcher ซึ่งแสดงผล BackStackMatchResult ที่มี Back Stack สังเคราะห์ List เนื่องจาก BackStackMatchResult มอบหมายการเปรียบเทียบให้กับผลการจับคู่พื้นฐาน การห่อหุ้มตัวจับคู่ใน withBackStack จึงรักษาการจัดอันดับการจับคู่เดิมไว้

หากต้องการจัดการ Back Stack ที่ได้ในกิจกรรม ให้ดูหัวข้อ จับคู่คำขอขาเข้า