앱 작업을 통해 Android 앱을 Google 어시스턴트로 확장(레벨 2)

1. 개요

앱 작업을 통해 사용자는 Google 어시스턴트에서 바로 특정 앱 기능을 실행하여 Android 앱의 도달범위를 확장할 수 있습니다. Android 개발자는 기능을 구현하여 사용자에게 제공되는 기능의 유형과 더불어 이러한 요청을 처리할 방식을 Google 어시스턴트에 알릴 수 있습니다.

첫 번째 앱 작업 Codelab에서는 건강/피트니스 BII 카테고리의 내장 인텐트(BII)를 구현하여 Google 어시스턴트를 샘플 피트니스 앱으로 확장하는 방법을 알아봤습니다. BII는 사용자가 어시스턴트에 자주 요청하는 작업의 유형을 나타내는 카테고리로 구성됩니다.

이 Codelab에서는 거의 모든 Android 앱에서 처리할 수 있는 일반적인 앱 작업을 나타내는 '일반' BII 카테고리의 BII를 사용하여 앱 작업을 앱에 추가하는 방법을 알아봅니다.

이 Codelab에서는 앱 작업을 사용한 개발 관련 중급 수준의 개념을 다룹니다. Android 앱을 개발하고 Android 인텐트를 구현해 본 경험이 있어야 합니다.

빌드할 내용

이 Codelab에서는 사용자가 어시스턴트에 다음 작업을 요청할 수 있도록 샘플 할 일 목록 앱에 일반 BII 2개를 추가합니다.

Google 어시스턴트가 앱에서 진행 중인 작업을 표시하는 3개의 단계적 화면

그림 1. Google 어시스턴트가 앱에서 진행 중인 작업을 표시하는 3개의 단계적 화면

학습 내용

일반 카테고리 BII를 사용하여 어시스턴트를 대부분의 Android 앱으로 확장하는 방법을 알아봅니다. Android 스튜디오용 Google 어시스턴트 플러그인을 사용하여 일반적인 BII를 테스트하는 방법도 알아봅니다.

기본 요건

  • git이 설치된 셸 명령어를 실행하는 터미널이 필요합니다.
  • Android 스튜디오의 최신 안정화 버전이 필요합니다.
  • 작업을 테스트하기 위해 Google Play 스토어에 인터넷 액세스가 가능한 실제 또는 가상 Android 기기가 필요합니다.
  • 동일한 Google 계정으로 Android 스튜디오에 로그인해야 하고, 테스트 기기에서 Google 앱과 Google 어시스턴트 앱 모두에 로그인해야 합니다.

이 Codelab에서는 Android 기기(실제 기기 또는 가상 기기)를 사용하여 작업을 테스트합니다. 실제 기기를 사용하는 경우 기기가 로컬 개발 머신에 연결되어 있어야 합니다. 또한 해당 기기의 Google 앱에 로그인한 상태여야 하며, 동일한 Google 계정을 사용하여 Android 스튜디오에 로그인한 상태여야 합니다. 아울러 기기에 Google 어시스턴트 앱도 설치되어 있어야 합니다.

2. 작동 방식 이해

앱 작업은 Google 어시스턴트의 사용자를 Android 앱에 연결합니다. 그런데 어떻게 작동하는 것일까요?

사용자가 어시스턴트에 개발자의 앱을 사용하고 싶다고 알리면 어시스턴트는 shortcuts.xml 파일에서 개발자의 앱에 등록된 앱 작업을 찾습니다. 이 파일에는 어시스턴트 내장 인텐트 또는 맞춤 인텐트를 Android 인텐트 또는 딥 링크에 연결하는 앱의 기능이 포함되어 있습니다.

사용자가 어시스턴트에 쿼리를 말하면 어시스턴트는 사용자의 입력을 파싱하여 앱 작업 인텐트에 일치시킵니다(이 Codelab에서는 BII). 어시스턴트는 개발자의 Android 앱의 shortcuts.xml 파일에서 지원하는 기능을 알고 있습니다. 인텐트 일치의 경우 해당 BII를 사용하는 기능에는 요청을 처리할 방법이 포함됩니다. 이 Codelab에서 처리 대상은 앱에서 활동을 실행하는 Android 인텐트입니다.

다음 다이어그램에는 이러한 어시스턴트 흐름이 나와 있습니다.

Google 어시스턴트에서 사용자 음성 쿼리를\n 처리하는 방법을 설명하는 흐름그림 2. Google 어시스턴트에서 음성 쿼리를 처리하는 방법을 설명하는 흐름

shortcuts.xml 프로젝트 파일에는 각 앱 작업에 관한 다음 정보가 포함되어 있습니다.

  • 앱 작업에서 사용하는 내장 인텐트 또는 맞춤 인텐트
  • 사용자에게 제공해야 하는 Android 활동 또는 딥 링크
  • 내장 인텐트의 매개변수가 사용자가 어시스턴트에 제공한 정보에 매핑되는 방식

그다음, Android 활동에서는 제공된 Android 인텐트 또는 딥 링크에 필터를 적용하고 이러한 인텐트 및 딥 링크를 처리하여 사용자가 원하는 기능을 사용자에게 제공합니다. 결과적으로 어시스턴트에서 사용자의 쿼리에 대한 응답으로 앱 기능을 호출하는 사용자 경험이 만들어집니다.

3. 개발 환경 준비

이 Codelab에서는 Android용 할 일 목록 샘플 앱을 사용합니다. 이 샘플 앱을 통해 할 일 목록에 항목을 추가하고, 카테고리별로 항목을 검색하고, 완료한 작업에 대한 정보를 확인할 수 있습니다.

기본 파일 다운로드

다음 명령어를 실행하여 샘플 앱의 GitHub 저장소를 클론합니다.

git clone --branch codelab-start https://github.com/actions-on-google/appactions-common-biis-kotlin.git

저장소를 클론한 후에는 다음 단계를 따라 Android 스튜디오에서 엽니다.

  1. Welcome to Android Studio 대화상자에서 Import project를 클릭합니다.
  2. 저장소를 클론한 폴더를 찾아 선택합니다.

Codelab 완료 후의 앱 버전을 보려면 --branch master 플래그를 사용하여 샘플 앱 저장소를 클론합니다.

Android 애플리케이션 ID 업데이트

앱의 애플리케이션 ID를 업데이트하면 테스트 기기에서 앱을 고유하게 식별할 수 있으며, 앱이 Play Console에 업로드되어도 '패키지 이름 중복' 오류가 발생하지 않도록 방지할 수 있습니다. 애플리케이션 ID를 업데이트하려면 app/build.gradle을 엽니다.

android {
...
  defaultConfig {
    applicationId "com.MYUNIQUENAME.android.fitactions"
    ...
  }
}

applicationId 필드의 'MYUNIQUENAME'을 고유한 값으로 바꿉니다.

기기에서 앱 테스트

앱에 추가 변경사항을 적용하기 전에 샘플 앱의 기능을 파악하면 도움이 됩니다. 에뮬레이터에서 앱을 실행하려면 다음 단계를 따르세요.

  1. Android 스튜디오에서 Run > Run app을 선택하거나 툴바에서 Run을 클릭합니다.
  2. Select Deployment Target 대화상자에서 기기를 선택하고 OK를 클릭합니다. 작업은 Android 5(API 수준 21)에서도 실행되지만, Android 10(API 수준 30) 이상의 OS 버전을 사용하는 것이 좋습니다.
  3. Home 버튼을 길게 눌러 어시스턴트를 설정하고, 작동하는지 확인합니다. 아직 로그인하지 않았다면 기기에서 어시스턴트에 로그인해야 합니다.

Android 가상 기기에 대한 자세한 내용은 가상 기기 만들기 및 관리하기를 참고하세요.

할 일 목록 샘플 앱을 보여주는 애니메이션

그림 3. 할 일 목록 샘플 앱을 보여주는 애니메이션

앱을 간단히 탐색하여 기능을 확인합니다. 더하기 아이콘을 탭하면 새 작업 항목이 생성되며, 오른쪽 상단의 메뉴 항목을 통해 완료 상태를 기준으로 작업 항목을 검색하고 필터링할 수 있습니다.

테스트 플러그인 설치

Google 어시스턴트 플러그인을 사용하면 테스트 기기에서 앱 작업을 테스트할 수 있습니다. 아직 테스트 도구를 설치하지 않았다면 다음 단계를 따라 설치합니다.

  1. File > Settings(MacOS의 경우 Android Studio > Preferences)로 이동합니다.
  2. 'Plugins' 섹션에서 Marketplace로 이동하여 'Google 어시스턴트'를 검색합니다. 테스트 도구를 수동으로 다운로드하여 설치할 수도 있습니다.
  3. 도구를 설치하고 Android 스튜디오를 다시 시작합니다.

4. 항목 검색 BII 기능 추가

actions.intent.GET_THING BII의 경우 인앱 검색 기능을 Google 어시스턴트로 확장합니다. 이 단계에서는 사용자가 샘플 앱에서 특정 작업을 검색할 수 있도록 GET_THING BII를 구현하고 테스트합니다.

항목 검색 기능 정의

검색 관련 앱 작업이 진행되는 과정에서 어시스턴트는 사용자 쿼리에서 검색어를 thing.name BII 매개변수로 추출한 후 해당 값을 Android 애플리케이션에 전달합니다.

앱에 GET_THING BII를 추가하려면 app/src/main/res/xml 샘플 프로젝트 디렉터리에 있는 shortcuts.xml을 업데이트하고 최상위 <shortcuts> 태그 내에 <capability> 요소를 포함합니다.

shortcuts.xml

<shortcuts ....>
    <capability android:name="actions.intent.GET_THING">
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.yourApplicationId.appaction"
            android:targetClass="com.example.android.architecture.blueprints.todoapp.tasks.TasksActivity">
            <parameter
                android:name="thing.name"
                android:key="q"/>
        </intent>
    </capability>
</shortcuts>

위 구성은 다음과 같습니다.

  1. 앱이 GET_THING BII에 응답한다고 선언합니다.
  2. BII에 대한 응답으로 앱을 실행하는 Android 인텐트의 빌드 방식을 지정합니다.
    • 활동은 targetPackagetargetClass를 통해 식별됩니다.
    • BII 매개변수 thing.nameq라는 인텐트 Extra에 매핑됩니다.

이름이 지정된 활동은 앱 매니페스트에 있어야 하며 내보내야 합니다.

제공된 Android 애플리케이션에는 메타데이터가 포함되어 있으므로 AndroidManifest에서 shortcuts.xml 파일을 인식할 수 있습니다.

<meta-data
   android:name="android.app.shortcuts"
   android:resource="@xml/shortcuts" />

앱 작업 테스트

어시스턴트에서 앱의 인앱 검색을 테스트하려면 다음 단계를 따릅니다.

  1. Android 기기가 연결되어 있는지 확인합니다.
  2. Tools > Google Assistant > App Actions Test Tool로 이동합니다.
  3. Create Preview를 클릭하여 App namelocale을 기본값으로 그대로 둡니다. 메시지가 표시되면 앱 작업 정책 및 서비스 약관을 검토하고 이에 동의합니다.
  4. 먼저, 도구에서 BII를 선택하고 구성하라는 단계가 안내되면 actions.intent.GET_THING을 선택합니다. name 값을 running shoes에서 milk로 변경합니다.
  5. Run App Action을 클릭합니다.

이 테스트에서 GET_THING BII는 name 속성을 사용하여 앱에서 'milk'가 포함된 작업을 검색합니다. 이전 앱 작업과 마찬가지로, 테스트 도구를 사용하여 작업을 테스트하거나 테스트 기기에서 "Hey Google, 작업 목록에서 케이크 믹스 검색해 줘" 또는 다른 검색구문을 사용하면 됩니다.

5. 앱 기능 열기 BII 기능 추가

이 단계에서는 사용자가 어시스턴트를 사용하여 진행 중이거나 완료한 작업을 확인할 수 있도록 앱 기능 열기 BII를 구현합니다. 이를 위해 기능이 트리거되는 방식, 매개변수가 전달되는 방식, 호출할 Android 인텐트에 관한 정보가 포함된 shortcuts.xml의 기능을 완료합니다. 이 Codelab에서는 OPEN_APP_FEATURE BII를 사용합니다. 이 BII를 구현한 후에는 기기에서 작업을 테스트합니다.

앱 열기 기능 추가

shortcuts.xml의 항목 찾기 기능 요소 아래에 앱 열기 기능을 위한 두 번째 기능을 추가합니다.

shortcuts.xml

<capability android:name="actions.intent.OPEN_APP_FEATURE">
   <intent
       android:action="android.intent.action.VIEW"
       android:targetPackage="yourApplicationId"
       android:targetClass="com.example.android.architecture.blueprints.todoapp.tasks.TasksActivity">
       <parameter
           android:name="feature"
           android:key="feature"/>
   </intent>
</capability>

이 기능은 앱 열기 기능 BII와 Android 인텐트를 함께 매핑하므로, 앱 열기 기능이 트리거되면 Android 인텐트가 트리거됩니다.

Android 인텐트를 트리거하기 전에 사용자의 입력에서 지원되는 매개변수가 가져와집니다. OPEN_APP_FEATURE BII는 사용자 쿼리에서 추출된 앱 기능을 나타내는 하나의 매개변수인 feature를 지원합니다. 이 애플리케이션에서는 2가지 기능 유형, 즉 활성 작업과 완료한 작업을 지원합니다. 이러한 기능을 사용하면 사용자는 작업 목록을 필터링한 보기를 통해 앱을 열 수 있습니다. 이러한 기능을 지원하려면 인라인 인벤토리를 사용해야 합니다.

인라인 인벤토리를 사용하여 인텐트 매개변수 처리

인텐트 매개변수는 사용자 쿼리에서 추출된 요소를 나타냅니다. 예를 들어 사용자가 "Hey Google, ExampleApp에서 피자 주문해 줘"와 같이 말하면 어시스턴트는 '피자'를 food.item schema.org 인텐트 매개변수로 추출한 후 해당 매개변수를 처리할 작업에 전달합니다.

앱 열기 기능 BII는 사용자 쿼리에서 추출된 앱 기능을 나타내는 하나의 매개변수인 feature를 지원합니다. 이 매개변수에는 매개변수 값과 일치시키기 위해 지원되는 일련의 앱 기능 이름을 어시스턴트에 제공하는 인라인 인벤토리가 필요합니다.

feature 인텐트 매개변수를 처리하려면 앱 열기 기능 위에 다음 코드로 shortcuts.xml의 바로가기를 추가합니다.

shortcuts.xml

<shortcut
   android:shortcutId="active_tasks"
   android:shortcutShortLabel="@string/label_active"
   android:enabled="false">
   <capability-binding
       android:key="actions.intent.OPEN_APP_FEATURE">
       <parameter-binding
           android:key="feature"
           android:value="@array/active_tasks_synonyms" />
   </capability-binding>
</shortcut>

<shortcut
   android:shortcutId="completed_tasks"
   android:shortcutShortLabel="@string/label_completed"
   android:enabled="false">
   <capability-binding
       android:key="actions.intent.OPEN_APP_FEATURE">
       <parameter-binding
           android:key="feature"
           android:value="@array/completed_tasks_synonyms" />
   </capability-binding>
</shortcut>

위의 코드에서는 기능 및 매개변수 바인딩과 함께 shortcut 요소로 표시되는 인라인 인벤토리를 정의했습니다. 바로가기는 BII 매개변수의 인벤토리로 사용할 수 있습니다. Google 어시스턴트는 사용자 쿼리를 바로가기의 매개변수 바인딩에 있는 값과 일치시킵니다. 일치하는 매개변수 값의 경우 shortcutId가 처리 인텐트에 추가됩니다. 사용자가 요청을 통해 OPEN_APP_FEATURE BII를 활성화하면 어시스턴트는 기능 매개변수 값을 바로가기의 값 속성에 일치시켜 Extra에서 값을 parametertargetClass에 전달합니다.

예를 들어 사용자가 "Hey Google, ExampleApp에서 완료한 작업 보여 줘"와 같이 말하면 어시스턴트는 기능 인텐트 매개변수 값인 '완료한 작업'을 이에 상응하는 인벤토리 바로가기와 일치시켜 해당 값을 OPEN_APP_FEATURE 기능에 전달합니다. 그러면 어시스턴트가 Android 인텐트를 트리거합니다.

앱 작업 테스트

개발 및 테스트하는 과정에서 테스트 기기에서 Google 어시스턴트 플러그인을 사용하여 어시스턴트를 통한 앱 작업을 미리 볼 수 있습니다. 또한 이 도구를 사용하여 앱 작업의 인텐트 매개변수를 조정하고 사용자가 어시스턴트에 실행을 요청할 수 있는 다양한 방식을 작업에서 어떻게 처리할지 테스트할 수 있습니다.

테스트 도구로 앱 작업을 테스트하려면 다음 단계를 따르세요.

  1. 실제 Android 테스트 기기를 연결하거나 Android Emulator를 시작합니다.
  2. 테스트 도구가 표시되지 않으면 Tools > Google Assistant > App Actions Test Tool로 이동하여 엽니다.
  3. Update 버튼을 클릭하여 미리보기를 새로고침합니다.
  4. 먼저, 도구에서 BII를 선택하고 구성하라는 단계가 안내되면 actions.intent.OPEN_APP_FEATURE을 선택합니다.
  5. feature 상자에서 기본 History 값을 Completed tasks로 업데이트합니다.
  6. Run App Action을 클릭합니다.

또는 기기의 어시스턴트 앱에서 직접 호출 이름을 사용하여 앱 작업을 사용해 볼 수 있습니다. 예를 들어 "Hey Google, 작업 목록에서 완료한 작업 보여 줘"라고 말할 수 있습니다.

6. 다음 단계

축하합니다

이제 일반적인 BII를 사용하여 거의 모든 Android 앱이 Google 어시스턴트와 호환되도록 설정할 수 있습니다.

학습한 내용

이 Codelab에서 학습한 내용은 다음과 같습니다.

  • 사용자가 어시스턴트를 사용하여 특정 앱 기능을 자세히 살펴볼 수 있도록 하는 방법
  • 사용자가 어시스턴트에서 인앱 검색에 액세스하는 방법
  • Google 어시스턴트 플러그인을 사용하여 일반 BII를 테스트하는 방법

다음 단계

여기에서 할 일 목록 앱을 추가로 조정해 볼 수 있습니다. 완료된 프로젝트를 참조하려면 GitHub의 –master branch 저장소를 참고하세요.

다음은 앱 작업으로 이 앱을 확장하는 방법을 자세히 알아보기 위한 몇 가지 제안사항입니다.

Actions on Google 과정을 계속하려면 다음 리소스를 살펴보세요.

트위터 @ActionsOnGoogle에서 Google을 팔로우하여 최신 소식을 확인하고 #AoGDevs로 트윗을 보내 직접 빌드한 결과물을 공유하세요.

의견 설문조사

마지막으로 이 설문조사를 작성하여 이 Codelab 사용 경험에 관한 의견을 보내주세요.