Android 앱용 앱 작업을 구현할 때 테마의 변형인 요청을 처리해야 할 수 있습니다. 예를 들어 사용자가 어시스턴트에 "Hey Google, Example 앱에서 달리기 시작해 줘"와 같이 말하여 다양한 운동을 시작할 수 있도록 피트니스 앱이 START_EXERCISE
내장 인텐트 (BII)를 구현한다고 가정해 보겠습니다.
이 인텐트를 처리하려면 '조깅', '스프린트', '레이스'와 같은 변형을 포함하여 각 유형의 운동을 처리하는 요청 매칭 로직이 필요합니다. 이 로직은 지원되는 운동이 증가함에 따라 복잡해집니다.
START_EXERCISE
와 같이 지원되는 BII의 경우 인라인 인벤토리를 사용하여 이렇게 복잡한 일치 로직을 피할 수 있습니다. 인라인 인벤토리는 앱의 기능과 콘텐츠를 나타내는 shortcuts.xml
에 정의된 정적 Android 바로가기 집합입니다.
각 바로가기에는 항목 식별자와 사용자가 항목을 참조하는 방식의 변형을 나타내는 동의어 목록이 포함됩니다. 호출 중 BII는 사용자 제공 BII 매개변수를 동의어 목록과 비교합니다. 일치하는 항목을 찾으면 BII 매개변수가 일치하는 바로가기의 항목 식별자로 업데이트됩니다.
인라인 인벤토리를 사용하면 Google 어시스턴트가 앱 작업 호출 중에 애플리케이션에 제공되는 BII 매개변수 값을 간소화할 수 있습니다.
인라인 인벤토리는 BII 매개변수의 참고표와 같이 작동하여 개발자가 정의한 항목 식별자를 사용하여 사용자가 앱의 기능이나 콘텐츠를 참조하는 다양한 방법을 표현합니다. 처리에서 BII 매개변수의 항목 식별자를 예측할 수 있도록 하여 앱의 요청 매칭 로직을 단순화합니다.
제한사항 및 대안
인라인 인벤토리 바로가기에는 다음과 같은 제한사항이 있습니다.
- 바로가기 제한: 앱당 최대 1,000개의 인라인 인벤토리 바로가기를 정의할 수 있습니다.
- 동의어 제한: 각 인라인 인벤토리 바로가기는 최대 20개의 동의어 값을 포함할 수 있습니다.
- 정적 정의: 인라인 인벤토리 바로가기는
shortcuts.xml
에서 정적으로 선언되며 앱의 새 버전을 게시하여 사용자를 위해서만 업데이트할 수 있습니다.
정적 구성의 요구사항을 고려할 때 인라인 인벤토리는 메뉴 항목이나 버스 경로, 음료 크기와 같이 자주 변경되지 않으며 맞춤설정되지 않은 앱 정보를 어시스턴트로 확장하는 데 가장 적합합니다. 다른 콘텐츠 유형의 경우 다음과 같은 대안을 고려하세요.
웹 인벤토리: 사용자 쿼리를 지원되는 앱 콘텐츠 식별자와 일치시킬 때 어시스턴트가 공개 웹 콘텐츠를 쿼리할 수 있습니다. 웹 인벤토리 쿼리는 호출 중에 실시간으로 발생하므로 제품 카탈로그, 소셜 미디어 게시물, 기타 자주 업데이트되는 콘텐츠를 어시스턴트로 확장할 수 있습니다.
동적 바로가기: 맞춤설정된 앱 콘텐츠의 인벤토리를 어시스턴트로 확장합니다. 동적 바로가기를 통해 사용자는 음식 주문 앱에서 좋아하는 음료를 재정렬하거나 메모 작성 앱에서 쇼핑 목록을 불러오는 것과 같은 일반적인 작업을 빠르게 재생할 수 있습니다.
인라인 인벤토리 만들기
인라인 인벤토리는 사용자가 앱의 콘텐츠와 기능을 요청하는 다양한 방식을 애플리케이션에서 예상하는 예측 가능한 식별자로 변환할 수 있는 편리한 방법을 어시스턴트에 제공하여 개발을 간소화합니다. 예를 들어 앱에서 사용자가 음성으로 시작할 수 있는 다양한 운동을 제공하고, 사용자가 동일한 운동 유형에 다음과 같은 요청을 할 것으로 예상한다고 가정해 보겠습니다.
- Hey Google, ExampleApp에서 달리기 시작해 줘
- Hey Google, ExampleApp에서 조깅 시작해 줘
인라인 인벤토리 바로가기에서 shortcutId
을 앱에서 예상하는 운동 식별자인 "CARDIO_RUN"
로 설정합니다. 그런 다음 '달리기'와 '조깅'을 shortcutId
와 연결된 동의어로 지정합니다. 그런 다음 사용자가 위의 쿼리로 앱 작업을 트리거하면 어시스턴트는 처리 인텐트를 생성할 때 BII 매개변수에 "CARDIO_RUN"
식별자를 사용합니다.
샘플 app/res/shortcuts.xml
파일의 다음 스니펫은 이 사례를 구현합니다.
<capability android:name="actions.intent.START_EXERCISE">
<intent
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.ExerciseActivity">
<parameter android:name="exercise.name" android:key="exercise" />
</intent>
</capability>
<shortcut android:shortcutId="CARDIO_RUN">
<capability-binding android:key="actions.intent.START_EXERCISE">
<parameter-binding
android:key="exercise.name"
android:value="@array/run_names" />
</capability-binding>
</shortcut>
이전 샘플에서 인라인 인벤토리 shortcut
은 <capability-binding>
요소 내에서
<parameter-binding>
태그를 선언하여
<capability>
에 정의된 exercise.name
BII 매개변수에 바인딩합니다.
문자열 배열 리소스 @array/run_names
는 어시스턴트가 인식하고 "CARDIO_RUN"
항목 ID에 매핑하는 res/values/arrays.xml
의 동의어 목록을 지정합니다.
<!-- Synonym values for "CARDIO_RUN" inline inventory -->
<resources>
<string-array name="run_names">
<item>Run</item>
<item>Jog</item>
<item>Sprint</item>
</string-array>
</resources>
기능에 <url-template>
가 제공되면 일치하는 값의 shortcutId
가 생성된 URL의 매개변수 자리표시자에 삽입됩니다. 샘플 app/res/shortcuts.xml
파일의 다음 코드가 이러한 사례를 구현합니다.
<capability android:name="actions.intent.START_EXERCISE">
<intent>
<url-template android:value="myapp://workout{?exercise}" />
<parameter android:name="exercise.name" android:key="exercise" />
</intent>
</capability>
<shortcut android:shortcutId="CARDIO_RUN">
<capability-binding android:key="actions.intent.START_EXERCISE">
<parameter-binding
android:key="exercise.name"
android:value="@array/run_names" />
</capability-binding>
</shortcut>
위 샘플에서 어시스턴트는 처리 딥 링크 myapp://workout?exercise=CARDIO_RUN
를 생성합니다.
바로가기 인텐트를 사용한 처리
기본적으로 바로가기는 바로가기의 <capability-binding>
태그에 선언된 대로 일치하는 인라인 인벤토리 값의 shortcutId
를 바로가기가 바인딩된 capability
의 intent
에 제공합니다. 또는 capability
에 <shortcut-fulfillment>
태그를 추가하여 바로가기 자체에 정의된 intent
가 처리에 사용되도록 지정할 수 있습니다.
샘플 app/res/shortcuts.xml
파일의 다음 코드는 바로가기 처리를 구현합니다.
<capability android:name="actions.intent.START_EXERCISE">
<shortcut-fulfillment>
<parameter android:name="exercise.name"/>
</shortcut-fulfillment>
</capability>
<shortcut android:shortcutId="CARDIO_RUN">
<capability-binding android:key="actions.intent.START_EXERCISE">
<parameter-binding
android:key="exercise.name"
android:value="@array/run_names" />
</capability-binding>
<intent android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.ExerciseActivity">
<parameter android:name="exercise.name" android:key="exercise" />
</intent>
</shortcut>
위 샘플에서 사용자 쿼리가 exercise.name
매개변수의 인라인 인벤토리 값과 일치하면 <shortcut-fulfillment>
태그는 결합된 바로가기의 intent
가 처리에 사용되도록 지정합니다.
공개 앱 기능 BII의 인라인 인벤토리
인라인 인벤토리는 일반적으로 이를 지원하는 BII의 선택적 기능이지만 OPEN_APP_FEATURE
와 같은 특정 BII에는 필수입니다. 흔히 사용되는 BII를 통해 사용자는 어시스턴트를 사용하여 특정 앱 기능에 딥 링크로 연결할 수 있습니다.
앱 기능 열기 BII에는 사용자를 앱에 딥 링크로 연결하기 전에 사용자가 요청한 기능이 있는지 확인하기 위해 앱 기능 이름의 인라인 인벤토리가 필요합니다.
샘플 app/res/shortcuts.xml
파일의 다음 코드는 앱의 주문 상태 기능을 나타내는 단일 바로가기로 이 BII를 구현합니다.
<capability android:name="actions.intent.OPEN_APP_FEATURE">
<intent
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.MyClass">
<parameter
android:name="feature"
android:key="featureParam" />
</intent>
<!-- Required fallback fulfillment to handle when parameters are missing from user query. -->
<intent
android:targetPackage="com.example.myapp"
android:targetClass="com.example.myapp.MyClass">
<parameter
android:name="HOME_SCREEN"
android:key="featureParam" />
</intent>
</capability>
<!-- Inline inventory for OPEN_APP_FEATURE. -->
<shortcut android:shortcutId="ORDER_STATUS">
<capability-binding android:key="actions.intent.OPEN_APP_FEATURE">
<parameter-binding
android:key="feature"
android:value="@array/order_status_names" />
</capability-binding>
</shortcut>
res/values/arrays.xml
의 문자열 배열 리소스인 @array/order_status_names
는 이 기능의 동의어 목록을 지정합니다.
<resources>
<string-array name="order_status_names">
<item>Order status</item>
<item>Orders</item>
<item>Order history</item>
</string-array>
</resources>
위의 기능이 준비되면 어시스턴트는 동일한 기능에 관한 다양한 문구를 처리할 수 있습니다.
- "Hey Google, Example App에서 주문 상태 보여 줘."
- "Hey Google, ExampleApp에서 내 주문 보여 줘."
- "Hey Google, ExampleApp에서 주문 내역 보여 줘."
인라인 인벤토리 테스트
관련 앱 작업 기능을 처리하면서 어시스턴트가 애플리케이션에 제공하는 BII 매개변수 값을 검사하여 인벤토리를 테스트합니다. 인라인 인벤토리는 인벤토리에 결합된 BII 매개변수의 사용자 제공 값을 일치하는 인라인 인벤토리 바로가기의 shortcutId
로 대체하는 방식으로 작동합니다.
예를 들어 START_EXERCISE
BII 기능은 인라인 인벤토리를 사용하여 사용자 제공 BII 매개변수 '달리기'를 상응하는 운동 ID인 "CARDIO_RUN"
로 변환할 수 있습니다.
Google 어시스턴트 플러그인을 사용하면 테스트 기기의 어시스턴트에서 인라인 인벤토리 앱 작업을 미리 볼 수 있습니다. 다음 단계에 따라 플러그인을 사용하여 인벤토리를 테스트하세요.
- 인라인 인벤토리와 연결된 동의어 값으로 BII 기능의 인벤토리에 바인딩된 매개변수를 구성합니다.
- 플러그인에서 BII를 트리거하여 테스트 기기에서 호출합니다.
- 앱 작업 처리 중에 어시스턴트가 애플리케이션에 제공하는 결과 매개변수 값을 검사합니다.