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 các ứng dụng thông qua ứ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 để nhận các thao tác phù hợp theo ngữ cảnh cho hoạt động hiện tại. Các 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 nói một cụm từ khoá. Khi phản hồi, hệ thống sẽ mở một cửa sổ cấp cao nhất hiển thị các thao tác phù hợp theo ngữ cảnh.

Một ứng dụng trợ lý, chẳng hạn như Trợ lý Google, 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. Tính năng này hoạt động với 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 Trợ lý 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 Trợ lý 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 để Trợ lý có thể chạy và điều khiển, hãy xem phần Trợ lý Google và ứng dụng đa phương tiện.

Sử dụng Trợ lý

Hình 1 minh hoạ một 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 Home (Màn hình chính), các lệnh gọi lại Assist API sẽ được gọi trong ứng dụng nguồn (bước 1). Trợ lý sẽ hiển thị cửa sổ lớp phủ (bước 2 và 3), sau đó người dùng chọn thao tác cần thực hiện. Trợ lý sẽ thực thi hành động đã chọn, chẳng hạn như kích hoạt một ý định có đường liên kết sâu đến ứng dụng nhà hàng (đích đến) (bước 4).

Hình 1. Ví dụ về hoạt động 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 như truy cập nội dung màn hình dưới dạng văn bản và truy cập ảnh chụp màn hình, như minh hoạ trong Hình 2.

Hình 2. Cài đặt tính năng hỗ trợ 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 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êm thông tin để giúp cải thiện trải nghiệm người dùng 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ẻ thông tin khác với trợ lý. Ví dụ: ứng dụng nhạc của bạn có thể chọn truyền thông tin đĩ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. Lưu ý rằng API Assist 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 đa phương tiệ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 chung của ứng dụng bằng cách đăng ký một trình nghe ứng dụng và cung cấp thông tin cụ thể về hoạt động thông qua 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 cách triển khai Application.OnProvideAssistDataListener và đăng ký cách triển khai đó bằng registerOnProvideAssistDataListener(). Để cung cấp thông tin theo ngữ cảnh dành riêng cho hoạt động, hoạt động sẽ ghi đè onProvideAssistData()onProvideAssistContent(). Hai phương thức hoạt động được gọi sau khi lệnh gọi lại toàn cục không bắt buộc được gọi. Vì các lệnh gọi lại thực thi trên luồng chính, nên các lệnh gọi lại này phải hoàn tất kịp thời. 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 tất cả ngữ cảnh của ứng dụng hiện tại được thể hiện dưới dạng một thực thể của AssistStructure. Bạn có thể ghi đè phương thức này để đặt mọi nội dung bạn muốn vào gói và 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 với Trợ lý bằng cách cung cấp các tệp 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, một ứng dụng 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ách triển khai tuỳ chỉnh onProvideAssistContent(), nhờ đó mang lại các 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 phải triển khai onProvideAssistContent() và gọi setClipData().

Phương thức triển khai mặc định

Nếu không triển khai lệnh gọi lại onProvideAssistData() hoặc onProvideAssistContent(), hệ thống vẫn tiếp tục và chuyển thông tin được thu thập tự động đến trợ lý, trừ phi cửa sổ hiện tại được gắn cờ là secure (bảo mật). Như trong Hình 3, hệ thống sử dụng cách 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 thành phần 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ý thu thập 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 Giúp ứng dụng dễ tiếp cận, bao gồm:

Loại trừ lượt xem từ trợ lý

Để xử lý thông tin nhạy cảm, ứng dụng của bạn có thể loại trừ chế độ xem 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ể sử 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) để loại trừ tất cả thành phần hiển thị khỏi trợ lý. Xin lưu ý rằng FLAG_SECURE không khiến lệnh gọi lại API Trợ lý 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ả trước đó của hướng dẫn này.

Lưu ý: Đối với tài khoản doanh nghiệp (Android cho công việc), 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

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ều cần cân nhắc về thứ tự Z

Trợ lý sử dụng một cửa sổ lớp phủ nhẹ hiển thị 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 vĩnh viễn gây cản trở cửa sổ lớp phủ, như minh hoạ trong Hình 4.

Hình 4. Thứ tự Z của lớp hỗ trợ

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á chúng ngay lập tức vì việc để chúng trên màn hình sẽ làm giảm trải nghiệm người dùng.

Ứng dụng đích

Các ứng dụng Trợ lý thường tận dụng tính năng liên kết sâu để tìm các ứng dụng đích. Để biến ứng dụng của bạn 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. Việc so khớp giữa ngữ cảnh hiện tại của người dùng và các đường liên kết sâu hoặc các thao tác có thể khác hiển thị trong cửa sổ lớp phủ (minh hoạ trong bước 3 trong Hình 1) là tuỳ theo cách triển khai Trợ lý Google. Ví dụ: Ứng dụng Trợ lý Google sử dụng tính năng liên kết sâu và Đường liên kết đến ứng dụng để thúc đẩy 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 nê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 cách triển khai VoiceInteractionSessionServiceVoiceInteractionSession như minh hoạ trong ví dụ về VoiceInteraction này. Phương thức 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(). Phương thức này nhận ảnh chụp màn hình thông qua onHandleScreenshot().