Tối ưu hóa nội dung ngữ cảnh cho Trợ lý

Android 6.0 Marshmallow giới thiệu một cách mới để người dùng tương tác với ứng dụng thông qua các ứng dụng trợ lý, chẳng hạn như Trợ lý Google. Trợ lý là một cửa sổ cấp cao nhất mà người dùng có thể xem để lấy các thao tác phù hợp theo ngữ cảnh cho hoạt động hiện tại. Những thao tác này có thể bao gồm các đường liên kết sâu đến các ứng dụng khác trên thiết bị.

Người dùng kích hoạt trợ lý bằng cách nhấn và giữ nút Màn hình chính hoặc bằng cách nói một cụm từ khoá. Để phản hồi, hệ thống sẽ mở ra một cửa sổ cấp cao nhất hiển thị các hành động có liên quan theo ngữ cảnh.

Ứng dụng trợ lý (chẳng hạn như Trợ lý Google) sẽ triển khai cửa sổ lớp phủ trợ lý thông qua một tính năng có tên là Now on Tap, hoạt động được với các chức năng ở cấp nền tảng Android. Hệ thống cho phép người dùng chọn một ứng dụng trợ lý. Ứng dụng này sẽ lấy thông tin theo bối cảnh từ ứng dụng của bạn bằng cách sử dụng API Hỗ trợ của Android.

Hướng dẫn này giải thích cách các ứng dụng Android sử dụng API Hỗ trợ của Android để cải thiện trải nghiệm người dùng với trợ lý. Để tìm hiểu cách tạo một ứng dụng đa phương tiện sao cho Trợ lý có thể khởi chạy và điều khiển, hãy xem bài viết Trợ lý Google và ứng dụng đa phương tiện.

Sử dụng Trợ lý

Hình 1 minh hoạ hoạt động tương tác thông thường của người dùng với trợ lý. Khi người dùng nhấn và giữ nút Màn hình chính, các lệnh gọi lại API Hỗ trợ sẽ được gọi trong ứng dụng nguồn (bước 1). Trợ lý sẽ kết xuất cửa sổ lớp phủ (bước 2 và 3), sau đó người dùng chọn thao tác để thực hiện. Trợ lý thực thi thao tác đã chọn, chẳng hạn như kích hoạt một ý định bằng đường liên kết sâu đến ứng dụng nhà hàng (destination) (bước 4).

Hình 1. Ví dụ về tương tác với Trợ lý với tính năng Now on Tap của ứng dụng Google

Người dùng có thể định cấu hình trợ lý bằng cách chọn Cài đặt > Ứng dụng > Ứng dụng mặc định > Trợ lý và nhập bằng giọng nói. Người dùng có thể thay đổi các tuỳ chọn hệ thống, chẳng hạn như truy cập vào nội dung trên màn hình dưới dạng văn bản và truy cập vào ảnh chụp màn hình, như trong Hình 2.

Hình 2. Cài đặt trợ lý và nhập bằng giọng nói

Ứng dụng nguồn

Để đảm bảo ứng dụng của bạn hoạt động với trợ lý dưới dạng một nguồn thông tin cho người dùng, bạn chỉ cần làm theo các phương pháp hay nhất về hỗ trợ tiếp cận. Phần này mô tả cách cung cấp thông tin bổ sung để giúp cải thiện trải nghiệm người dùng của trợ lý, cũng như các tình huống cần xử lý đặc biệt, chẳng hạn như Khung hiển thị tuỳ chỉnh.

Chia sẻ thêm thông tin với trợ lý

Ngoài văn bản và ảnh chụp màn hình, ứng dụng của bạn có thể chia sẻ các thông tin khác với trợ lý. Ví dụ: ứng dụng âm nhạc của bạn có thể chọn truyền thông tin về đĩa nhạc hiện tại để trợ lý có thể đề xuất các hành động thông minh hơn phù hợp với hoạt động hiện tại. Xin lưu ý rằng API hỗ trợ không cung cấp chế độ điều khiển nội dung nghe nhìn. Để thêm các chế độ điều khiển nội dung nghe nhìn, hãy xem phần Trợ lý Google và ứng dụng nghe nhìn.

Để cung cấp thêm thông tin cho trợ lý, ứng dụng của bạn sẽ cung cấp ngữ cảnh ứng dụng chung bằng cách đăng ký trình nghe ứng dụng và cung cấp thông tin dành riêng cho hoạt động bằng các lệnh gọi lại hoạt động như trong Hình 3:

Hình 3. Sơ đồ trình tự vòng đời của API hỗ trợ

Để cung cấp ngữ cảnh ứng dụng chung, ứng dụng sẽ tạo một phương thức triển khai của Application.OnProvideAssistDataListener và đăng ký phương thức này bằng registerOnProvideAssistDataListener(). Để cung cấp thông tin theo ngữ cảnh cụ thể của hoạt động, hoạt động đó sẽ ghi đè onProvideAssistData()onProvideAssistContent(). Hai phương thức hoạt động này được gọi sau khi lệnh gọi lại toàn cục tuỳ chọn được thực hiện. Vì các lệnh gọi lại thực thi trên luồng chính, nên chúng phải hoàn tất nhanh chóng. Các lệnh gọi lại chỉ được gọi khi hoạt động đang chạy.

Cung cấp bối cảnh

Khi người dùng kích hoạt trợ lý, onProvideAssistData() sẽ được gọi để tạo một Ý định ACTION_ASSIST đầy đủ với toàn bộ ngữ cảnh của ứng dụng hiện tại được biểu thị dưới dạng một thực thể của AssistStructure. Bạn có thể ghi đè phương thức này để đặt bất kỳ nội dung nào bạn muốn vào gói nhằm xuất hiện trong phần EXTRA_ASSIST_CONTEXT của ý định hỗ trợ.

Mô tả nội dung

Ứng dụng của bạn có thể triển khai onProvideAssistContent() để cải thiện trải nghiệm người dùng của Trợ lý bằng cách cung cấp thông tin tham chiếu liên quan đến nội dung liên quan đến hoạt động hiện tại. Bạn có thể mô tả nội dung ứng dụng bằng từ vựng phổ biến do Schema.org xác định thông qua đối tượng JSON-LD. Trong ví dụ dưới đây, ứng dụng âm nhạc cung cấp dữ liệu có cấu trúc để mô tả đĩa nhạc mà người dùng đang xem:

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);
}

Bạn cũng có thể cải thiện trải nghiệm người dùng bằng các cách triển khai tuỳ chỉnh của onProvideAssistContent(). Việc này có thể mang lại những lợi ích sau:

Lưu ý: Các ứng dụng sử dụng phương thức triển khai lựa chọn văn bản tuỳ chỉnh có thể cần triển khai onProvideAssistContent() và gọi setClipData().

Cách triển khai mặc định

Nếu bạn không triển khai lệnh gọi lại onProvideAssistData()onProvideAssistContent(), thì hệ thống vẫn tiếp tục và chuyển thông tin được thu thập tự động cho trợ lý, trừ phi cửa sổ hiện tại bị gắn cờ là bảo mật. Như trong Hình 3, hệ thống sử dụng các phương thức triển khai mặc định của onProvideStructure()onProvideVirtualStructure() để thu thập thông tin về văn bản và hệ phân cấp khung hiển thị. Nếu khung hiển thị của bạn triển khai tính năng vẽ văn bản tuỳ chỉnh, hãy ghi đè onProvideStructure() để cung cấp cho trợ lý văn bản hiển thị cho người dùng bằng cách gọi setText(CharSequence).

Trong hầu hết các trường hợp, việc triển khai tính năng hỗ trợ tiếp cận sẽ cho phép trợ lý lấy thông tin cần thiết. Để triển khai tính năng hỗ trợ tiếp cận, hãy quan sát các phương pháp hay nhất được mô tả trong phần Tăng khả năng hỗ trợ tiếp cận cho ứng dụng, bao gồm:

Loại trừ lượt xem khỏi Trợ lý

Để xử lý thông tin nhạy cảm, ứng dụng của bạn có thể loại trừ khung hiển thị hiện tại khỏi trợ lý bằng cách đặt tham số bố cục FLAG_SECURE của WindowManager. Bạn phải đặt FLAG_SECURE một cách rõ ràng cho mọi cửa sổ do hoạt động tạo ra, bao gồm cả hộp thoại. Ứng dụng của bạn cũng có thể dùng setSecure() để loại trừ một nền tảng khỏi trợ lý. Không có cơ chế chung (cấp ứng dụng) nào để loại trừ tất cả các chế độ xem khỏi trợ lý. Xin lưu ý rằng FLAG_SECURE không khiến các lệnh gọi lại API hỗ trợ ngừng kích hoạt. Hoạt động sử dụng FLAG_SECURE vẫn có thể cung cấp thông tin rõ ràng cho ứng dụng trợ lý bằng các lệnh gọi lại được mô tả ở phần trên của hướng dẫn này.

Lưu ý: Đối với các tài khoản doanh nghiệp (Android for Work), quản trị viên có thể tắt tính năng thu thập dữ liệu trợ lý cho hồ sơ công việc bằng cách sử dụng phương thức setScreenCaptureDisabled() của API DevicePolicyManager.

Tương tác bằng giọng nói

Các lệnh gọi lại API hỗ trợ cũng được gọi khi phát hiện cụm từ khoá. Để biết thêm thông tin, hãy xem tài liệu về Thao tác bằng giọng nói.

Những điểm cần lưu ý về thứ tự Z

Trợ lý sử dụng một cửa sổ lớp phủ nhẹ hiển thị phía trên hoạt động hiện tại. Vì người dùng có thể kích hoạt trợ lý bất cứ lúc nào, nên đừng tạo cửa sổ cảnh báo hệ thống cố định can thiệp vào cửa sổ lớp phủ, như minh hoạ trong Hình 4.

Hình 4. Hỗ trợ thứ tự lớp Z

Nếu ứng dụng của bạn sử dụng cửa sổ cảnh báo hệ thống, hãy xoá các cửa sổ đó ngay vì việc này sẽ làm giảm trải nghiệm người dùng trên màn hình.

Ứng dụng đích

Các ứng dụng có Trợ lý thường tận dụng liên kết sâu để tìm các ứng dụng đích. Để ứng dụng của bạn có thể trở thành một ứng dụng đích tiềm năng, hãy cân nhắc việc thêm tính năng hỗ trợ liên kết sâu. Sự khớp giữa ngữ cảnh người dùng hiện tại và các đường liên kết sâu hoặc các hành động tiềm năng khác hiển thị trong cửa sổ lớp phủ (minh hoạ ở bước 3 trong Hình 1) dành riêng cho cách triển khai của Trợ lý Google. Ví dụ: ứng dụng Trợ lý Google sử dụng đường liên kết sâu và Đường liên kết ứng dụng để tăng lưu lượng truy cập đến các ứng dụng đích.

Triển khai Trợ lý của riêng bạn

Bạn có thể muốn triển khai trợ lý của riêng mình. Như minh hoạ trong Hình 2, người dùng có thể chọn ứng dụng trợ lý đang hoạt động. Ứng dụng trợ lý phải cung cấp phương thức triển khai của VoiceInteractionSessionServiceVoiceInteractionSession như minh hoạ trong ví dụ về VoiceInteraction này. Ứng dụng này cũng yêu cầu quyền BIND_VOICE_INTERACTION. Sau đó, trợ lý có thể nhận văn bản và hệ phân cấp khung hiển thị được biểu thị dưới dạng một thực thể của AssistStructure trong onHandleAssist(). Thiết bị sẽ nhận được ảnh chụp màn hình thông qua onHandleScreenshot().