어시스턴트의 상황별 콘텐츠 최적화

Android 6.0 Marshmallow에서는 사용자가 어시스턴트를 통해 앱에 참여할 수 있는 새로운 방법을 도입합니다. 앱(예: Google은 어시스턴트를 탭합니다. 어시스턴트는 사용자가 상황별 정보를 가져오기 위해 볼 수 있는 최상위 창입니다. 나와 있습니다. 이러한 작업에는 있습니다.

사용자는 홈 버튼을 길게 누르거나 keyphrase인지 확인합니다. 이에 대응하여 시스템은 상황별 정보를 표시하는 최상위 창을 엽니다. 관련 액션을 취할 수 있습니다.

Google 어시스턴트와 같은 어시스턴트 앱은 Now on Tap이라는 기능을 제공합니다. 시스템 를 사용하면 사용자가 어시스턴트 앱을 선택할 수 있고, 어시스턴트 앱은 바로 Android의 Assist API입니다.

이 가이드에서는 Android 앱이 Android의 Assist API를 사용하여 어시스턴트를 개선하는 방법을 설명합니다. 있습니다. 어시스턴트가 실행할 수 있도록 미디어 앱을 만드는 방법 알아보기 및 제어에 관한 자세한 내용은 Google 어시스턴트 및 미디어 앱을 참고하세요.

어시스턴트 사용

그림 1은 어시스턴트와의 일반적인 사용자 상호작용을 보여줍니다. 사용자가 길게 누를 때 Assist API 콜백이 호출되어 소스 앱 (1단계)을 확인합니다. 어시스턴트는 오버레이 창을 렌더링합니다 (2단계 및 3단계). 그런 다음 사용자가 수행할 작업을 선택합니다. 어시스턴트는 선택된 작업을 실행하고 (대상) 식당 앱으로 연결되는 딥 링크로 인텐트를 실행하는 것을 예로 들 수 있습니다 (4단계).

그림 1. Now on Tap 기능을 사용한 어시스턴트 상호작용의 예 Google 앱

사용자는 설정 > 앱 > 기본 앱 > 지원 및 음성 입력을 사용합니다. 사용자는 시스템 옵션을 변경하거나 스크린샷에 액세스하는 방법을 보여줍니다(그림 2 참고).

그림 2. 지원 및 음성 입력 설정

소스 앱

앱이 사용자를 위한 정보 소스로서 어시스턴트와 작동하도록 하려면, 앱의 접근성에 가장 높은 권장사항을 참고하세요. 이 섹션에서는 추가 정보를 제공하는 방법을 설명합니다. 시나리오뿐만 아니라 어시스턴트 사용자 환경을 개선하는 데 도움이 됩니다. 특수 처리(예: 맞춤 뷰)가 필요한 클래스입니다.

추가 정보 공유 어시스턴트 사용

텍스트와 스크린샷 외에도 앱에서 정보를 공유할 수 있습니다. 예: 음악 앱은 현재 앨범 정보를 전달할 수 있고, 따라서 현재 앨범 정보를 현재 활동에 맞춤화된 더 스마트한 작업을 제안합니다. Assist API는 미디어 컨트롤을 제공하지 않습니다. 미디어 컨트롤을 추가하려면 다음을 참고하세요. Google 어시스턴트 및 미디어 앱.

어시스턴트에 추가 정보를 제공하기 위해 앱은 다음을 제공합니다. 전역 애플리케이션 컨텍스트: 앱 리스너를 등록하고 보시는 것처럼 활동 콜백을 사용하여 활동별 정보를 제공합니다. 그림 3:

그림 3. Assist API 수명 주기 시퀀스 다이어그램

전역 애플리케이션 컨텍스트를 제공하기 위해 앱은 Application.OnProvideAssistDataListener하고 등록합니다. (registerOnProvideAssistDataListener() 사용) 활동별로 상황에 맞는 정보를 제공하기 위해 활동은 onProvideAssistData()보다 우선 적용 및 onProvideAssistContent() 두 가지 활동 메서드는 선택적 전역 변수 이후에 콜백에 전달됩니다. 콜백은 기본 스레드에서 실행되므로 즉시 완료합니다. 콜백은 활동이 실행 중인 경우에만 호출됩니다.

맥락 제공

사용자가 어시스턴트를 활성화하면 onProvideAssistData()가 호출되어 전체 모든 컨텍스트가 포함된 ACTION_ASSIST 인텐트 AssistStructure의 인스턴스로 표현되는 현재 애플리케이션입니다. 이 메서드를 재정의하여 원하는 것을 모두 번들에 표시해도 됩니다. EXTRA_ASSIST_CONTEXT 부분입니다.

콘텐츠 설명

앱에서 onProvideAssistContent()를 구현할 수 있습니다. 콘텐츠 관련 참조를 제공하여 어시스턴트 사용자 환경을 개선합니다. 현재 활동과 관련되어 있습니다. 다음을 사용하여 앱 콘텐츠를 설명할 수 있습니다. 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
}

자바

@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() 중 어느 것도 해당하지 않는 경우 콜백이 구현되었더라도 시스템은 여전히 계속 진행하여 현재 자동 수집 정보를 어시스턴트에 제공하지 않는 한 창이 secure로 플래그됩니다. 그림 3과 같이 시스템은 onProvideStructure()onProvideVirtualStructure()의 기본 구현을 사용하여 다음을 수행합니다. 텍스트 및 뷰 계층 구조 정보를 수집합니다. 뷰가 텍스트 그리기, 제공하려면 onProvideStructure() 재정의 setText(CharSequence)를 호출하여 사용자에게 표시되는 텍스트가 포함된 어시스턴트입니다.

대부분의 경우 접근성 지원을 구현하면 필요한 정보를 얻을 수 있습니다 접근성 지원을 구현하려면 애플리케이션 만들기 액세스 가능(다음 항목 포함)

어시스턴트의 뷰 제외

민감한 정보를 처리하기 위해 앱은 어시스턴트에서 현재 뷰를 제외할 수 있습니다. WindowManagerFLAG_SECURE 레이아웃 매개변수를 설정하여 FLAG_SECURE를 명시적으로 설정해야 합니다. 모든 창(대화상자 포함)을 반환합니다. 또한 앱에서 제외할 setSecure() 표면이 보이게 할 수 있습니다. 없음 전역 (앱 수준) 메커니즘을 사용하여 어시스턴트에서 모든 뷰를 제외합니다. 참고 FLAG_SECURE로 인해 Assist API 콜백이 중지되지 않음 있습니다. FLAG_SECURE를 사용하는 활동은 여전히 명시적으로 앞에서 설명한 콜백을 사용하여 어시스턴트 앱에 정보 제공 이 가이드를 참고하세요.

참고: 기업 계정 (Android for Work)의 경우 관리자는 kubectl ‘get pods’ 직장 프로필의 어시스턴트 데이터 컬렉션을 삭제하려면 DevicePolicyManager API의 setScreenCaptureDisabled() 메서드를 사용합니다.

음성 상호작용

Assist API 콜백은 keyphrase(주요 구문) 감지를 참조하세요. 자세한 내용은 음성 작업 문서를 참조하세요.

Z-order 고려사항

어시스턴트는 확인할 수 있습니다. 사용자가 언제든지 어시스턴트를 활성화할 수 있으므로 영구 을 만들지 않음 시스템 알림 창(아래 그림 참고) 그림 4.

그림 4. 지원 레이어 Z-order

앱이 을(를) 사용하는 경우 시스템 알림 창에 있는 경우 즉시 삭제하세요. 사용자 환경이 저하될 수 있습니다.

대상 앱

어시스턴트 앱은 일반적으로 대상 앱을 찾기 위해 딥 링크를 활용합니다. 앱이 잠재적 대상 앱인 경우 딥 링크 지원을 추가하는 것이 좋습니다. 일치 현재 사용자 컨텍스트와 딥 링크 또는 오버레이 창 (그림 1의 3단계 참조)은 Google 어시스턴트의 구현에 따라 달라집니다. 대상 예를 들어 Google 어시스턴트 앱은 다음 정보를 공유하기 위해 딥 링크와 앱 링크를 사용합니다. 대상 앱으로 트래픽을 유도합니다.

자신의 어시스턴트 구현

자신의 어시스턴트를 구현하고자 할 수 있습니다. 그림 2에서 사용자가 활성 어시스턴트 앱을 선택할 수 있습니다. 이 어시스턴트 앱은 에 표시된 것처럼 VoiceInteractionSessionServiceVoiceInteractionSession의 구현을 제공해야 합니다. 이 VoiceInteraction 예를 참고하세요. 또한 BIND_VOICE_INTERACTION 권한도 필요합니다. 그러면 어시스턴트가 onHandleAssist()에서 AssistStructure의 인스턴스로 표현되는 텍스트 및 뷰 계층 구조를 수신합니다. onHandleScreenshot()을 통해 스크린샷을 수신합니다.