เมื่อมี android:autoVerify="true"
ใน Intent Filter ของแอปอย่างน้อย 1 รายการ การติดตั้งแอปในอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไปจะทำให้ระบบยืนยันโฮสต์ที่เชื่อมโยงกับ URL ใน Intent Filter ของแอปโดยอัตโนมัติ ใน Android 12 ขึ้นไป คุณยังเรียกใช้กระบวนการยืนยันด้วยตนเองเพื่อทดสอบตรรกะการยืนยันได้ด้วย
การยืนยันอัตโนมัติ
การยืนยันอัตโนมัติของระบบเกี่ยวข้องกับสิ่งต่อไปนี้
- ระบบจะตรวจสอบตัวกรอง Intent ทั้งหมดที่มีข้อมูลต่อไปนี้
- การดำเนินการ:
android.intent.action.VIEW
- หมวดหมู่:
android.intent.category.BROWSABLE
และandroid.intent.category.DEFAULT
- รูปแบบข้อมูล:
http
หรือhttps
- การดำเนินการ:
- สำหรับชื่อโฮสต์ที่ไม่ซ้ำกันแต่ละรายการที่พบในตัวกรอง Intent ด้านบน Android จะค้นหาไฟล์ Digital Asset Links ในเว็บไซต์ที่เกี่ยวข้องที่
https:///.well-known/assetlinks.json
หลังจากยืนยันรายชื่อเว็บไซต์ที่จะเชื่อมโยงกับแอปและยืนยันว่าไฟล์ JSON ที่โฮสต์ใช้ได้แล้ว ให้ติดตั้งแอปในอุปกรณ์ รออย่างน้อย 20 วินาทีเพื่อให้กระบวนการยืนยันแบบไม่พร้อมกัน เสร็จสมบูรณ์ ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่าระบบได้ยืนยันแอปของคุณและตั้งค่านโยบายการจัดการลิงก์ที่ถูกต้องแล้วหรือไม่
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
การยืนยันด้วยตนเอง
ตั้งแต่ Android 12 เป็นต้นไป คุณจะเรียกใช้การยืนยันโดเมนด้วยตนเองสำหรับแอปที่ติดตั้งในอุปกรณ์ได้ คุณสามารถดำเนินการตามกระบวนการนี้ได้ไม่ว่าแอปจะกำหนดเป้าหมายเป็น Android 12 หรือไม่ก็ตาม
ทำการเชื่อมต่ออินเทอร์เน็ต
หากต้องการยืนยันโดเมน อุปกรณ์ทดสอบต้องเชื่อมต่ออินเทอร์เน็ต
รองรับกระบวนการยืนยันโดเมนที่อัปเดตแล้ว
หากแอปกำหนดเป้าหมายเป็น Android 12 ขึ้นไป ระบบจะใช้ กระบวนการยืนยันโดเมนที่อัปเดตแล้วโดยอัตโนมัติ
หรือคุณจะเปิดใช้กระบวนการยืนยันที่อัปเดตแล้วด้วยตนเองก็ได้ โดยให้ เรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล
adb shell am compat enable 175408749 PACKAGE_NAME
รีเซ็ตสถานะของ Android App Link ในอุปกรณ์
ก่อนที่จะเรียกใช้การยืนยันโดเมนในอุปกรณ์ด้วยตนเอง คุณต้องรีเซ็ต สถานะของ Android App Link ในอุปกรณ์ทดสอบ โดยเรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล
adb shell pm set-app-links --package PACKAGE_NAME 0 all
คำสั่งนี้จะทำให้อุปกรณ์อยู่ในสถานะเดียวกับก่อนที่ผู้ใช้จะเลือกแอปเริ่มต้นสำหรับโดเมนใดๆ
เรียกใช้กระบวนการยืนยันโดเมน
หลังจากรีเซ็ตสถานะของ Android App Link ในอุปกรณ์แล้ว คุณจะทำการ ยืนยันได้ โดยเรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัล
adb shell pm verify-app-links --re-verify PACKAGE_NAME
ตรวจสอบผลการยืนยัน
หลังจากให้เวลาตัวแทนการยืนยันดำเนินการตามคำขอเสร็จสิ้นแล้ว ให้ตรวจสอบผลการยืนยัน หากต้องการดำเนินการดังกล่าว ให้เรียกใช้คำสั่งต่อไปนี้
adb shell pm get-app-links PACKAGE_NAME
เอาต์พุตของคำสั่งนี้จะคล้ายกับตัวอย่างต่อไปนี้
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
โดเมนที่ผ่านการยืนยันเรียบร้อยแล้วจะมีสถานะการยืนยันโดเมน
เป็น verified
สถานะอื่นๆ แสดงว่าดำเนินการยืนยันโดเมนไม่ได้
โดยเฉพาะสถานะ none
แสดงว่าตัวแทนการยืนยัน
อาจยังไม่ได้ดำเนินการยืนยันให้เสร็จสมบูรณ์
รายการต่อไปนี้แสดงค่าที่ส่งคืนที่เป็นไปได้ซึ่งการยืนยันโดเมนสามารถ ส่งคืนสำหรับโดเมนที่ระบุ
none
- ไม่มีการบันทึกข้อมูลใดๆ สำหรับโดเมนนี้ รออีกสักครู่เพื่อให้ ตัวแทนการยืนยันดำเนินการตามคำขอที่เกี่ยวข้องกับการยืนยันโดเมนให้เสร็จสิ้น จากนั้นเรียกใช้กระบวนการยืนยันโดเมนอีกครั้ง
verified
- โดเมนได้รับการยืนยันสําหรับแอปที่ประกาศเรียบร้อยแล้ว
approved
- โดเมนได้รับการอนุมัติโดยบังคับ ซึ่งมักจะเกิดจากการเรียกใช้คำสั่งเชลล์
denied
- โดเมนถูกปฏิเสธโดยบังคับ ซึ่งมักเกิดจากการเรียกใช้คำสั่งเชลล์
migrated
- ระบบได้เก็บผลลัพธ์ของกระบวนการก่อนหน้านี้ที่ใช้การยืนยันโดเมนเดิมไว้
restored
- โดเมนได้รับการอนุมัติหลังจากที่ผู้ใช้กู้คืนข้อมูล ระบบจะถือว่าโดเมนได้รับการยืนยันแล้วก่อนหน้านี้
legacy_failure
- โดเมนถูกปฏิเสธโดยเครื่องมือตรวจสอบเวอร์ชันเดิม ไม่ทราบสาเหตุที่เฉพาะเจาะจงที่ทำให้เกิดความล้มเหลว
system_configured
- โดเมนได้รับการอนุมัติโดยอัตโนมัติจากการกำหนดค่าอุปกรณ์
- รหัสข้อผิดพลาด
1024
ขึ้นไป รหัสข้อผิดพลาดที่กำหนดเองซึ่งเฉพาะเจาะจงสำหรับเครื่องมือยืนยันของอุปกรณ์
โปรดตรวจสอบอีกครั้งว่าคุณได้สร้างการเชื่อมต่อเครือข่ายแล้ว และเรียกใช้กระบวนการยืนยันโดเมนอีกครั้ง
ขอให้ผู้ใช้เชื่อมโยงแอปของคุณกับโดเมน
อีกวิธีหนึ่งที่แอปจะได้รับการอนุมัติสำหรับโดเมนคือการขอให้ผู้ใช้ เชื่อมโยงแอปกับโดเมนนั้น
ตรวจสอบว่าแอปของคุณได้รับอนุมัติสำหรับโดเมนแล้วหรือไม่
ก่อนที่จะแจ้งให้ผู้ใช้ดำเนินการ ให้ตรวจสอบว่าแอปของคุณเป็นตัวแฮนเดิลเริ่มต้นสำหรับ
โดเมนที่คุณกำหนดไว้ในองค์ประกอบ <intent-filter>
หรือไม่ คุณสามารถค้นหาสถานะการอนุมัติได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
DomainVerificationManager
API (ที่รันไทม์)- โปรแกรมบรรทัดคำสั่ง (ระหว่างการทดสอบ)
DomainVerificationManager
ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้ DomainVerificationManager
API
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
โปรแกรมบรรทัดคำสั่ง
เมื่อทดสอบแอปในระหว่างการพัฒนา คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อ ค้นหาสถานะการยืนยันของโดเมนที่องค์กรของคุณเป็นเจ้าของ
adb shell pm get-app-links --user cur PACKAGE_NAME
ในเอาต์พุตตัวอย่างต่อไปนี้ แม้ว่าแอปจะไม่ผ่านการยืนยันสำหรับโดเมน "example.org" แต่ผู้ใช้ 0 ได้อนุมัติแอปด้วยตนเองในการตั้งค่าระบบ และไม่มีแพ็กเกจอื่นที่ได้รับการยืนยันสำหรับโดเมนนั้น
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
นอกจากนี้ คุณยังใช้คำสั่งเชลล์เพื่อจำลองกระบวนการที่ผู้ใช้เลือกแอปที่เชื่อมโยงกับโดเมนที่กำหนดได้ด้วย
ดูคำอธิบายแบบเต็มของคำสั่งเหล่านี้ได้จากเอาต์พุตของ adb shell pm
ให้บริบทสำหรับคำขอ
ก่อนที่จะส่งคำขออนุมัติโดเมนนี้ โปรดระบุบริบทบางอย่างสำหรับผู้ใช้ เช่น คุณอาจแสดงหน้าจอเริ่มต้น กล่องโต้ตอบ หรือองค์ประกอบ UI ที่คล้ายกัน ซึ่งอธิบายให้ผู้ใช้ทราบว่าเหตุใดแอปของคุณจึงควรเป็นตัวแฮนเดิลเริ่มต้น สำหรับโดเมนหนึ่งๆ
ส่งคำขอ
หลังจากที่ผู้ใช้เข้าใจสิ่งที่แอปขอให้ทำแล้ว ให้ส่งคำขอ
โดยเรียกใช้ Intent ที่มี
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
การดำเนินการของ Intent และสตริงข้อมูลที่ตรงกับ
package:com.example.pkg
สำหรับแอปเป้าหมาย ดังที่แสดงใน
ข้อมูลโค้ดต่อไปนี้
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
เมื่อเรียกใช้ Intent ผู้ใช้จะเห็นหน้าจอการตั้งค่าที่ชื่อเปิดโดย ค่าเริ่มต้น หน้าจอนี้มีปุ่มตัวเลือกชื่อเปิดลิงก์ที่รองรับ ดังที่แสดงในรูปที่ 1
เมื่อผู้ใช้เปิดเปิดลิงก์ที่รองรับ ช่องทำเครื่องหมายชุดหนึ่งจะปรากฏขึ้น ในส่วนที่ชื่อลิงก์ที่จะเปิดในแอปนี้ จากนั้นผู้ใช้จะ เลือกโดเมนที่ต้องการเชื่อมโยงกับแอปของคุณได้ นอกจากนี้ ผู้ใช้ยัง เลือกเพิ่มลิงก์เพื่อเพิ่มโดเมนได้ด้วย ดังที่แสดงในรูปที่ 2 เมื่อผู้ใช้เลือก ลิงก์ใดก็ตามภายในโดเมนที่เพิ่มในภายหลัง ลิงก์จะเปิดในแอปของคุณ โดยอัตโนมัติ
เปิดโดเมนในแอปที่แอปยืนยันไม่ได้
ฟังก์ชันหลักของแอปอาจเป็นการเปิดลิงก์ในฐานะบุคคลที่สามโดยไม่มีความสามารถในการยืนยันโดเมนที่จัดการ ในกรณีนี้ ให้แจ้งผู้ใช้ว่า เมื่อเลือกเว็บลิงก์ในขณะนั้น ผู้ใช้จะเลือกไม่ได้ระหว่าง แอปของบุคคลที่หนึ่งกับแอปของคุณ (บุคคลที่สาม) ผู้ใช้ต้องเชื่อมโยงโดเมนกับแอปของบุคคลที่สามด้วยตนเอง
นอกจากนี้ ให้พิจารณาแสดงกล่องโต้ตอบหรือกิจกรรมแทรมโพลีนที่อนุญาตให้ผู้ใช้เปิดลิงก์ในแอปของบุคคลที่หนึ่งหากผู้ใช้ต้องการทำเช่นนั้น โดยทำหน้าที่เป็นพร็อกซี ก่อนที่จะตั้งค่ากล่องโต้ตอบหรือกิจกรรม Trampoline ดังกล่าว ให้ตั้งค่าแอปเพื่อให้มีระดับการมองเห็นแพ็กเกจ ในแอปของบุคคลที่หนึ่งที่ตรงกับตัวกรอง Intent บนเว็บของแอป