สร้างอินสแตนซ์ 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) คุณจึงสร้างตัวกรองโดยใช้นิพจน์ Lambda ได้ด้วย ดังนี้

ใช้ Matcher ที่มีให้

ไลบรารีประกอบด้วยการติดตั้งใช้งาน DeepLinkMatcher มาตรฐาน 3 รายการ ได้แก่ 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 แทนที่จะสร้างอินสแตนซ์ BackStackMatcher โดยตรง ให้เรียกใช้ฟังก์ชันส่วนขยาย withBackStack ใน DeepLinkMatcher อื่น withBackStack จะรวม Receiver ไว้ใน BackStackMatcher ที่แสดงผล BackStackMatchResult ซึ่งมี Back Stack สังเคราะห์ List เนื่องจาก BackStackMatchResult มอบสิทธิ์การเปรียบเทียบให้กับผลลัพธ์การจับคู่ที่สำคัญ การรวม Matcher ไว้ใน withBackStack จะคงการจัดอันดับการจับคู่เดิมไว้

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