การเพิ่มประสิทธิภาพเนื้อหาตามบริบทสำหรับ Assistant

Android 6.0 Marshmallow นำเสนอวิธีใหม่ในการมีส่วนร่วมกับแอปผ่านผู้ช่วย แอปต่างๆ เช่น Google Assistant ผู้ช่วยคือหน้าต่างระดับบนสุดที่ผู้ใช้สามารถดูเพื่อดึงข้อมูลตามบริบท การดำเนินการที่เกี่ยวข้องกับกิจกรรมปัจจุบัน การดำเนินการเหล่านี้อาจรวมถึง Deep Link ไปยังแอปอื่นๆ ใน อุปกรณ์

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

แอปผู้ช่วย เช่น Google Assistant จะใช้หน้าต่างการวางซ้อนของ Assistant ผ่าน คุณลักษณะที่ชื่อว่า Now on Tap ซึ่งทำงานร่วมกับฟังก์ชันระดับแพลตฟอร์มของ Android ระบบ ช่วยให้ผู้ใช้เลือกแอปผู้ช่วย ซึ่งจะรับข้อมูลบริบทจากแอปโดยใช้ API ช่วยเหลือของ Android

คำแนะนำนี้จะอธิบายวิธีที่แอป Android ใช้ Assist API ของ Android เพื่อปรับปรุง Assistant ประสบการณ์ของผู้ใช้ ดูวิธีสร้างแอปสื่อเพื่อให้ Assistant เปิดได้ และการควบคุม โปรดดู Google Assistant และแอปสื่อ

การใช้ Assistant

รูปที่ 1 แสดงการโต้ตอบทั่วไปของผู้ใช้กับผู้ช่วย เมื่อผู้ใช้กดค้าง ปุ่มหน้าแรกจะมีการเรียกใช้ Callback ของ Assist API ในแอปแหล่งที่มา (ขั้นตอนที่ 1) ผู้ช่วยแสดงหน้าต่างที่วางซ้อน (ขั้นตอนที่ 2 และ 3) จากนั้นผู้ใช้จะเลือกการดำเนินการที่ต้องการ Assistant จะดำเนินการที่เลือก เช่น การเรียกให้ Intent เริ่มทำงานด้วย Deep Link ไปยังแอปร้านอาหาร (ปลายทาง) (ขั้นตอนที่ 4)

รูปที่ 1 ตัวอย่างการโต้ตอบกับ Assistant กับฟีเจอร์ Now on Tap แอป Google

ผู้ใช้สามารถกำหนดค่าผู้ช่วยโดยเลือกการตั้งค่า > แอป > แอปเริ่มต้น > ช่วยเหลือและ ป้อนข้อมูลด้วยเสียง ผู้ใช้จะเปลี่ยนตัวเลือกของระบบได้ เช่น การเข้าถึง เนื้อหาบนหน้าจอเป็นข้อความและเข้าถึงภาพหน้าจอ ดังที่แสดงในรูปที่ 2

รูปที่ 2 ช่วยเหลือและ การตั้งค่าการป้อนข้อมูลด้วยเสียง

แอปแหล่งที่มา

เพื่อให้แอปทำงานกับ Assistant ในฐานะแหล่งข้อมูลให้ผู้ใช้ได้ คุณก็แค่ปฏิบัติตามการช่วยเหลือพิเศษที่ดีที่สุด แนวทางปฏิบัติที่ดีที่สุด ส่วนนี้อธิบายวิธีให้ข้อมูลเพิ่มเติม เพื่อช่วยปรับปรุงประสบการณ์ของผู้ใช้ Assistant รวมถึงสถานการณ์ต่างๆ ที่ต้องมีการจัดการพิเศษ เช่น มุมมองที่กำหนดเอง

แชร์ข้อมูลเพิ่มเติม ด้วย Assistant

นอกจากข้อความและภาพหน้าจอแล้ว แอปของคุณยังแชร์ ข้อมูลอื่นๆ กับผู้ช่วย เช่น เพลงของคุณ แอปสามารถเลือกส่งข้อมูลปัจจุบันของอัลบั้มเพื่อให้ Assistant สามารถ แนะนำการดำเนินการที่ชาญฉลาด ปรับ ให้เหมาะกับกิจกรรมในปัจจุบันได้ โปรดทราบว่า API การสนับสนุน ไม่มีการควบคุมสื่อ หากต้องการเพิ่มการควบคุมสื่อ โปรดดู Google Assistant และแอปสื่อ

เพื่อให้ข้อมูลเพิ่มเติมแก่ผู้ช่วย แอปจะ บริบทแอปพลิเคชันส่วนกลางด้วยการลงทะเบียน Listener แอปและ ระบุข้อมูลเฉพาะกิจกรรมพร้อมกับ Callback ของกิจกรรมตามที่แสดงใน รูปที่ 3:

รูปที่ 3 แผนภาพลำดับวงจรการใช้งาน API การสนับสนุน

เพื่อให้บริบททั่วโลกของแอปพลิเคชัน แอปจึงสร้างการติดตั้งใช้งาน Application.OnProvideAssistDataListener และลงทะเบียน ด้วย registerOnProvideAssistDataListener() ในการให้ข้อมูลบริบทเฉพาะกิจกรรม กิจกรรม ลบล้าง onProvideAssistData() และ onProvideAssistContent() เราจะเรียกวิธีกิจกรรมทั้งสองนี้หลังจากตัวเลือกสากล มีการเรียกใช้ Callback เนื่องจาก Callback จะทำงานในเทรดหลัก ให้ทำทันที ระบบจะเรียกใช้ Callback เมื่อกิจกรรมทำงานอยู่เท่านั้น

การให้บริบท

เมื่อผู้ใช้เปิดใช้งานผู้ช่วย เรียกใช้ onProvideAssistData() เพื่อสร้าง ACTION_ASSIST Intent ที่มีบริบททั้งหมดของ แอปพลิเคชันปัจจุบันแสดงเป็นอินสแตนซ์ของ AssistStructure คุณสามารถลบล้างเมธอดนี้เพื่อวาง สิ่งที่คุณต้องการในชุดข้อมูลเพื่อให้ปรากฏใน ความตั้งใจสนับสนุน EXTRA_ASSIST_CONTEXT ส่วน

การอธิบายเนื้อหา

แอปของคุณใช้ onProvideAssistContent() ได้ เพื่อปรับปรุงประสบการณ์ของผู้ใช้ Assistant ด้วยการให้ข้อมูลอ้างอิงที่เกี่ยวข้องกับเนื้อหา เกี่ยวข้องกับกิจกรรมปัจจุบัน คุณสามารถอธิบายเนื้อหาแอปได้โดยใช้ คำศัพท์ทั่วไปที่กำหนดโดย Schema.org ผ่านออบเจ็กต์ JSON-LD ในตัวอย่างด้านล่าง แอปเพลงมี เพื่ออธิบายอัลบั้มเพลงที่ผู้ใช้กำลังใช้งานอยู่ กำลังดู:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

นอกจากนี้ คุณยังปรับปรุงประสบการณ์ของผู้ใช้ได้ด้วยการติดตั้งใช้งานที่กําหนดเอง onProvideAssistContent(), ซึ่งมีประโยชน์ดังต่อไปนี้

หมายเหตุ: แอปที่ใช้การเลือกข้อความที่กำหนดเองอาจต้องมี เพื่อติดตั้งใช้งาน onProvideAssistContent() และโทรหา setClipData()

การใช้งานเริ่มต้น

หากทั้ง onProvideAssistData() และ onProvideAssistContent() มีการใช้งาน Callback แล้ว ระบบจะยังคงดำเนินการต่อและส่งผ่าน ข้อมูลที่รวบรวมไปยังผู้ช่วยโดยอัตโนมัติ ยกเว้นในกรณีที่ มีข้อความว่าปลอดภัย ดังที่แสดงในรูปที่ 3 ระบบจะใช้การใช้งานเริ่มต้นของ onProvideStructure() และ onProvideVirtualStructure() เพื่อ เก็บรวบรวมข้อความและดูข้อมูลลำดับชั้น หากข้อมูลพร็อพเพอร์ตี้ของคุณใช้บรรทัดที่กำหนดเอง ภาพวาดข้อความ ลบล้าง onProvideStructure() เพื่อระบุ Assistant พร้อมข้อความที่แสดงแก่ผู้ใช้โดยโทรหา setText(CharSequence)

ในกรณีส่วนใหญ่ การสนับสนุนการช่วยเหลือพิเศษจะช่วยให้ เป็นผู้ช่วยเพื่อรับข้อมูลที่ต้องการ หากต้องการใช้การสนับสนุนการช่วยเหลือพิเศษ ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่อธิบายไว้ในการสร้างแอปพลิเคชัน เข้าถึงได้ รวมถึงสิ่งต่อไปนี้

  • ระบุแอตทริบิวต์ android:contentDescription
  • ป้อนข้อมูล AccessibilityNodeInfo สำหรับมุมมองที่กำหนดเอง
  • สร้าง ตรวจสอบว่าออบเจ็กต์ ViewGroup ที่กำหนดเองถูกต้อง แสดง บุตรหลานของตน

การยกเว้นยอดดูจากผู้ช่วย

แอปจะยกเว้นมุมมองปัจจุบันจากผู้ช่วยเพื่อจัดการข้อมูลที่ละเอียดอ่อน โดยการตั้งค่าพารามิเตอร์เลย์เอาต์ FLAG_SECURE ของ WindowManager คุณต้องตั้งค่า FLAG_SECURE อย่างชัดแจ้งสำหรับ ทุกหน้าต่างที่กิจกรรมสร้างขึ้นรวมถึงกล่องโต้ตอบ นอกจากนี้ แอปยังสามารถใช้ setSecure() ที่จะยกเว้น แพลตฟอร์มจาก Assistant ไม่มี กลไกสากล (ระดับแอป) เพื่อยกเว้นการดูทั้งหมดจาก Assistant หมายเหตุ ว่า FLAG_SECURE ไม่ได้ทำให้การเรียกกลับของ Assist API หยุดลง เริ่มทำงาน กิจกรรมที่ใช้ FLAG_SECURE จะยังคงสามารถ ให้ข้อมูลแก่แอป Assistant โดยใช้ Callback ที่อธิบายไว้ก่อนหน้านี้ ในคู่มือนี้

หมายเหตุ: สำหรับบัญชีองค์กร (Android for Work) ผู้ดูแลระบบสามารถปิดใช้ การรวบรวมข้อมูลผู้ช่วยสำหรับโปรไฟล์งานโดยใช้เมธอด setScreenCaptureDisabled() ของ DevicePolicyManager API

การโต้ตอบด้วยเสียง

มีการเรียกใช้ Callback ของ API สนับสนุนตาม วลีสำคัญ สำหรับข้อมูลเพิ่มเติม โปรดดู เสียง Actions

ข้อควรพิจารณาเกี่ยวกับ Z-order

Assistant ใช้หน้าต่างวางซ้อนที่มีน้ำหนักเบาซึ่งแสดงอยู่ด้านบน ด้วย เพราะผู้ใช้สามารถเปิดใช้งานผู้ช่วยได้ตลอดเวลา ห้ามสร้าง อย่างถาวร หน้าต่างแจ้งเตือนของระบบที่รบกวนหน้าต่างที่วางซ้อนดังที่แสดงใน รูปที่ 4

รูปที่ 4 Z-order ในเลเยอร์สนับสนุน

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

แอปปลายทาง

แอป Assistant มักจะใช้ประโยชน์จากการทำ Deep Link เพื่อค้นหาแอปปลายทาง หากต้องการให้ เป็นแอปปลายทางที่เป็นไปได้ โปรดพิจารณาเพิ่มการสนับสนุนการทำ Deep Link การจับคู่ ระหว่างบริบทผู้ใช้ปัจจุบันกับ Deep Link หรือการทำงานอื่นๆ ที่เป็นไปได้ที่แสดงใน หน้าต่างที่วางซ้อน (แสดงในขั้นตอนที่ 3 ในรูปที่ 1) จำเพาะเจาะจงกับการใช้งาน Google Assistant เท่านั้น สำหรับ ตัวอย่างเช่น แอป Google Assistant ใช้การทำ Deep Link และ App Link เพิ่มการเข้าชมไปยังแอปปลายทาง

ใช้งาน Assistant ของคุณเอง

คุณอาจต้องการใช้ผู้ช่วยของคุณเอง ดังที่แสดงในรูป 2 ผู้ใช้จะเลือกแอปผู้ช่วยที่ใช้งานอยู่ได้ แอป Assistant ต้องให้การใช้งาน VoiceInteractionSessionService และ VoiceInteractionSession ดังที่แสดงใน VoiceInteractionตัวอย่างนี้ และต้องมีสิทธิ์ BIND_VOICE_INTERACTION ด้วย จากนั้นผู้ช่วยจะ รับข้อความและมุมมองต้นไม้ที่แสดงเป็นอินสแตนซ์ของ AssistStructure ใน onHandleAssist() โดยจะได้รับภาพหน้าจอผ่าน onHandleScreenshot()