앱 작업을 통해 Google 어시스턴트로 Android 앱 확장

앱 작업을 통해 사용자가 Google 어시스턴트가 특정 앱 기능을 바로 시작하도록 하여 Android 앱의 활용 범위를 확대할 수 있습니다. 앱 작업은 앱의 딥 링크 위에 빌드되어 사용자가 원하는 기능에 다른 방법으로 액세스하는 데 사용됩니다.

Android 개발자는 사용 가능한 내장 인텐트 중 하나를 구현하여 사용자가 더 빠르고 원활하게 작업을 완료하도록 지원할 수 있습니다

이 Codelab에서는 Actions on Google을 이용한 개발을 위한 중급 수준의 개념을 다룹니다. 이전 Android 앱 개발 및 딥 링크 처리 경험이 있어야만 이 Codelab을 따라올 수 있습니다. Android 앱 개발이 처음이라면 Android 개발자 기본 사항 Codelab 중 하나로 시작하는 것이 좋습니다.

빌드할 항목

이 Codelab에서는 샘플 피트니스 Android 앱에 다음과 같은 기능을 추가할 것입니다.

  • 사용자가 Google 어시스턴트를 사용하여 앱에서 운동 타이머를 시작할 수 있습니다.
  • 사용자가 Google 어시스턴트를 사용하여 앱에서 운동 타이머를 중지할 수 있습니다.

Google 어시스턴트가 앱에서 달리기 추적기를 시작하는 4개의 단계적 화면

학습할 내용

  • 앱 작업이 내 Android 앱에 적합한지 확인하는 방법
  • 내장 인텐트를 Android 활동과 연결하는 방법
  • 어시스턴트에서 Android 앱의 딥 링크 URL 매개변수를 가져오는 방법
  • 인라인 인벤토리를 사용하여 앱 기능에 식별자를 매핑하는 방법
  • Android 스튜디오에서 앱 작업을 테스트하는 방법

필요한 항목

계속하기 전에 다음 도구가 갖춰져 있는지 확인하세요.

  • git이 설치된 셸 명령어를 실행하는 터미널
  • Android 스튜디오 최신 버전
  • Google Play Console 액세스 권한이 있는 Google 계정
  • 앱 작업을 테스트할 실제 Android 기기

이 Codelab에서 사용되는 코드를 이해하려면 Kotlin과 XML에 능숙한 것이 좋지만, 필수 사항은 아닙니다.

이 Codelab의 앱 작업은 Google 어시스턴트에서 en-US, en-GB, en-CA, en-IN, en-BE, en-SG, en-AU 언어로만 트리거됩니다. 이 Codelab에서는 Android 앱에 사용되는 내장 인텐트에 기타 언어가 지원되지 않습니다.

이 Codelab에서는 실제 Android 기기를 사용하여 앱 작업을 테스트합니다. 실제 Android 기기에서 테스트하기 전에 기기가 로컬 개발 머신에 연결되어 있는지 확인하세요. 기기에서 Google 앱에 로그인해야 하며 동일한 Google 계정을 사용하여 Android 스튜디오에 로그인해야 합니다.

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

사용자가 어시스턴트에 앱을 사용하고 싶다고 표현하면 어시스턴트는 actions.xml 파일에서 앱에 등록된 앱 작업을 찾습니다. 앱 작업은 내장 인텐트(의미상으로 앱 기능 설명)와 처리 지침(딥 링크 템플릿 등)의 조합을 통해 이 파일에 설명되어 있습니다.

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

  • 앱 작업에서 사용하는 내장 인텐트
  • 앱 작업 처리 방법(예: 딥 링크를 통해)
  • 사용자가 어시스턴트에 제공한 정보에 인텐트의 매개변수를 매핑하는 방법

앱 작업은 사용자가 Google 어시스턴트에 제공한 정보를 기반으로 인텐트를 처리할 딥 링크를 생성합니다. 그러면 Android 활동에서 제공된 딥 링크를 필터링하고 처리하여 사용자에게 원하는 기능을 제공합니다.

이러한 과정을 통해 사용자 쿼리에 응답하여 어시스턴트가 앱 기능을 호출하는 사용자 경험이 형성됩니다.

이 Codelab의 시작점은 Android용 샘플 피트니스 앱입니다. 앱에서 사용자는 운동 타이머를 시작 및 중지하고 운동 루틴 정보를 볼 수 있습니다.

기본 파일 다운로드

이 Codelab의 기본 파일을 가져오려면 다음 명령어를 실행하여 GitHub 저장소를 클론합니다.

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

--branch codelab-start 옵션을 사용하면 이 Codelab이 시작되는 분기를 확인할 수 있습니다.

저장소를 클론한 후 Android 스튜디오에서 엽니다.

  1. Welcome to Android Studio 대화상자에서 (이미 프로젝트가 열려 있는 경우 먼저 닫고) Open an existing Android Studio project를 클릭합니다.
  2. 피트니스 앱 작업을 시작하려면 저장소를 클론한 폴더를 찾아 선택합니다.

Android 애플리케이션 ID 변경

피트니스 앱에 앱 작업을 구현하면 Android 스튜디오 플러그인을 사용하여 입력을 테스트하는 작업을 할 수 있습니다. 나중에 Codelab에서 이 플러그인을 설치할 수 있지만, Google Play Console의 프로젝트에 앱을 업로드할 때까지는 테스트 도구를 사용할 수 없습니다.

콘솔에서 샘플 피트니스 앱 버전을 고유하게 만들려면 app/build.gradle 파일의 기본 Android 구성에 나열된 애플리케이션 ID를 변경합니다.

build.gradle

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

applicationId에서 'MYUNIQUENAME'을 고유한 정보로 변경합니다. 그러면 패키지 이름이 변경되고 나중에 Play Console에 업로드할 때 '중복된 패키지 이름' 문제를 예방할 수 있습니다.

앱 사용해 보기

앱을 변경하기 전에 샘플 앱에서 할 수 있는 작업을 확인하면 도움이 될 수 있으니 에뮬레이터에서 앱을 실행해 봅니다.

  1. Android 스튜디오에서 Run > Run app을 선택하거나 툴바에서 Runacabcb8f8634af20.png을 클릭합니다.
  2. Select Deployment Target 대화상자에서 가상 기기를 선택하고 OK를 클릭합니다. Android 5(API 수준 21)에서도 작업이 실행되지만 OS 버전이 Android 8(API 수준 26) 이상인 기기에서 실행하는 것이 좋습니다.

에뮬레이터는 실제 기기와 같이 시작되고 부팅되므로 컴퓨터의 성능에 따라 다소 시간이 걸릴 수 있습니다. 앱 빌드가 완료되고 에뮬레이터가 준비되면 Android 스튜디오에서 앱을 에뮬레이터에 업로드하고 실행합니다.

운동 통계를 보여 주는 Fit Actions 앱이 열린 휴대전화

앱을 간단히 탐색하여 앱의 기능을 살펴봅니다. 실행 아이콘을 탭하면 운동 타이머가 시작되고 X 아이콘을 탭하면 타이머가 중지됩니다. 이 두 작업을 앱 작업을 통해 사용 설정합니다.

테스트 기기에서 위의 단계를 반복하여 앱이 두 개의 표시 경로에서 동일하게 작동하는지 확인합니다. 계속하기 전에 버튼을 길게 눌러 실제 기기에서 어시스턴트를 설정하고 작동하는지 확인합니다. 아직 로그인하지 않았다면 테스트 기기에서 어시스턴트에 로그인해야 합니다.

Play Console에 업로드

Android 스튜디오에서 앱을 빌드하고 내부 버전으로 Play Console에 업로드합니다. 앱을 업로드해야만 Android 스튜디오에서 앱 작업 테스트 도구를 사용할 수 있습니다.

Android 스튜디오에서 다음 단계를 따르세요.

  1. Build > Generate Signed Bundle / APK로 이동합니다.
  2. 'Android App Bundle'을 선택하고 Next를 클릭합니다.
  3. digitally sign your app에 세부정보를 입력하고 Next를 클릭합니다.
  4. '출시' 빌드 변형을 선택하고 Finish를 클릭합니다.

Google Play Console에서 방금 만든 App Bundle을 새로운 앱으로 업로드합니다.

  1. All apps 페이지에서 Create app을 클릭합니다.
  2. 앱에 원하는 이름을 지정하고 Create app을 클릭합니다. 이 Codelab에서는 앱을 만든 후 앱 정보를 입력할 필요가 없습니다.
  3. 사이드바 메뉴에서 Create app으로 이동하여 Internal testing 페이지를 찾습니다.
  4. Internal testing 페이지에서 Create new release를 클릭합니다.
  5. App bundles and APKs 패널에서 이전에 생성한 AAB 파일을 업로드합니다(app/release 디렉터리에 있을 가능성이 높음).
  6. Save를 클릭합니다.

이제 Play Console에 앱을 업로드했으므로, Android 스튜디오로 돌아갈 차례입니다.

테스트 플러그인 설치

Google 어시스턴트는 앱에 등록된 앱 작업을 인식해야 하므로 어떤 방식으로든 이러한 정보를 전달해야 합니다. 개발 중에 '앱 작업 테스트 도구' Android 스튜디오 플러그인을 사용하여 전달할 수 있습니다.

플러그인이 없는 경우 설치하세요.

  1. File > Settings(MacOS의 경우 Android Studio > Preferences)로 이동합니다.
  2. 플러그인 섹션에서 'Marketplace'로 이동하여 'App Actions test tool'을 검색합니다.
  3. 도구를 설치하고 Android 스튜디오를 다시 시작합니다.

앱 작업을 설정하려면 Android 앱에서 실행하는 함수에 매핑하는 내장 인텐트를 찾아야 합니다. 내장 인텐트 참조 페이지에는 Google 어시스턴트에 지원되는 내장 인텐트가 나열되어 있으며, 각각의 인텐트는 사용자가 원하는 작업을 표현하는 일반적인 방법을 모델링합니다.

참조에서는 앱 작업에서 처리할 수 있는 내장 인텐트가 카테고리 및 기능별로 그룹화됩니다.

이 Codelab에서는 사용자를 돕기 위해 두 개의 내장 제공 인텐트를 구현합니다.

이 과정에는 딥 링크 설정, 앱의 XML 리소스에서 앱 작업 정의, 딥 링크와 앱 작업 정의 연결이 포함됩니다.

딥 링크는 사용자를 바로 콘텐츠로 안내하며, 이 과정에서 정보를 인텐트에서 앱으로 전달합니다. 기본적으로 어시스턴트는 딥 링크를 사용하여 인텐트를 처리하고 앱에 매개변수를 전달합니다. 이 Codelab의 경우 수신 딥 링크는 "fit-actions.firebaseapp.com" 호스트와 "https" 스킴을 사용합니다.

Android 매니페스트 파일에서 기본 활동을 위한 인텐트 필터를 추가하여 지원되는 딥 링크를 정의합니다.

AndroidManifest.xml

<activity android:name="com.devrel.android.fitactions.FitMainActivity" ...>
    ... // Other intent filters

    <!-- Define your supported deeplinks -->
    <intent-filter
        android:autoVerify="true"
        tools:targetApi="m">

        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:host="fit-actions.firebaseapp.com"
            android:scheme="https" />
    </intent-filter>
</activity>

이제 활동에서 다음 함수를 추가하여 수신 딥 링크의 동작을 정의합니다.

FitMainActivity.kt

private fun handleDeepLink(data: Uri?) {
    when (data?.path) {
        DeepLink.START -> {
            // Get the parameter defined as "exerciseType" and add it to the fragment arguments
            val exerciseType = data.getQueryParameter(DeepLink.Params.ACTIVITY_TYPE).orEmpty()
            val type = FitActivity.Type.find(exerciseType)
            val arguments = Bundle().apply {
                putSerializable(FitTrackingFragment.PARAM_TYPE, type)
            }

            updateView(FitTrackingFragment::class.java, arguments)
        }
        DeepLink.STOP -> {
            // Stop the tracking service if any and return to home screen.
            stopService(Intent(this, FitTrackingService::class.java))
            updateView(FitStatsFragment::class.java)
        }
        else -> {
            // Path is not supported or invalid, start normal flow.
            showDefaultView()
        }
    }
}

DeepLink.STARTDeepLink.STOP은 샘플 앱에서 상수로 정의되며 수신 딥 링크의 상응하는 경로에 매핑됩니다. DeepLink.START의 경우 핸들러는 딥 링크 URL 매개변수를 통해 들어오는 인수를 얻게 됩니다.

이제 딥 링크 핸들러를 사용하도록 동일한 파일의 handleIntent 함수를 업데이트합니다.

FitMainActivity.kt

private fun Intent.handleIntent() {
    when (action) {
        // When the action is triggered by a deep-link, Intent.ACTION_VIEW will be used
        Intent.ACTION_VIEW -> handleDeepLink(data)
        // Otherwise start the app as you would normally do.
        else -> showDefaultView()
    }
}

이제 앱이 "https://fit-actions.firebaseapp.com/start" 형식의 인텐트를 필터링하면 운동 타이머를 시작합니다.

Android 디버그 브리지(adb) 사용에 능숙한 경우 실행 중인 기기에서 딥 링크 핸들러를 테스트할 수 있습니다. 이렇게 하려면 기기에서 앱을 업데이트하고 다음 셸 명령어를 사용합니다.

adb shell am start -a android.intent.action.VIEW -d "https://fit-actions.firebaseapp.com/start"

앱 작업이 작동하려면 Google 어시스턴트가 앱에 어떤 앱 작업이 등록되어 있는지 알아야 합니다. actions.xml 파일을 Android 패키지의 일부로 Play Console에 업로드하여 이 정보를 전달합니다.

새 리소스를 만들고 참조하려면 몇 가지 단계만 거치면 됩니다.

  1. actions.xml을 만들어 연결할 내장 인텐트와 필요한 매개변수를 설정합니다.
  2. 내장 인텐트 매개변수를 활동의 딥 링크 매개변수에 매핑합니다.
  3. AndroidManifest.xmlactions.xml 파일에 참조를 추가합니다.

actions.xml 만들기

앱에서 지원하는 앱 작업을 설명하기 위해 app/src/main/res/xmlactions.xml이라는 새 XML 파일을 만듭니다.

Android 스튜디오에서 다음 단계를 따르세요.

  1. File > New > XML > App Actions XML File로 이동합니다.
  2. Actions File Name에 'actions'를 입력합니다.
  3. Finish를 클릭하여 새 actions.xml 파일을 만들고 AndroidManifest.xml에 참조를 추가합니다.

새 파일이 생성되면 actions.xml의 콘텐츠를 다음 코드로 바꿉니다.

actions.xml

<?xml version="1.0" encoding="utf-8"?>

<actions>
    <action intentName="actions.intent.START_EXERCISE">
        <fulfillment urlTemplate="https://fit-actions.firebaseapp.com/start{?exerciseType}">
            <parameter-mapping
                intentParameter="exercise.name"
                urlParameter="exerciseType" />
        </fulfillment>
    </action>

    <action intentName="actions.intent.STOP_EXERCISE">
        <fulfillment urlTemplate="https://fit-actions.firebaseapp.com/stop" />
    </action>
</actions>

위의 코드에서는 요소를 사용하여 앱에서 운동 타이머를 시작하고 중지하는 앱 작업을 정의합니다. intentName 속성은 앱 작업을 사용하여 처리하는 내장 인텐트 두 개에 해당하며, 요소는 앱을 사용하여 작업을 수행하는 방법을 어시스턴트에 알려줍니다.

여기서 두 작업은 모두 urlTemplate 속성을 사용하여 딥 링크를 생성함으로써 처리됩니다. URL 템플릿은 AndroidManifest.xml 파일의 딥 링크에 정의된 호스트 및 스킴을 사용합니다. 각 URL 템플릿의 경로는 handleDeepLink 함수(이전에 기본 활동에 추가됨)에 해당합니다.

타이머를 시작하기 위해 내장 인텐트의 exercise.name 매개변수를 exerciseType URL 매개변수에 매핑합니다. 이렇게 하면 딥 링크 핸들러가 어시스턴트가 비즈니스 로직에 관한 인수를 가져올 수 있습니다.

Android 매니페스트가 actions.xml을 참조하는지 확인

이전 단계의 Android 스튜디오에서는 AndroidManifest.xmlactions.xml 파일 참조를 추가했습니다. Android 매니페스트에서 다음 요소를 검토하여 이를 확인합니다.

AndroidManifest.xml

<application>
    ...

    <meta-data
        android:name="com.google.android.actions"
        android:resource="@xml/actions" />
</application>

매니페스트 파일에 위의 요소가 표시되면 앱 작업 테스트로 이동합니다.

매니페스트 파일에 위의 요소가 표시되지 않으면 요소를 추가합니다.

앱 작업 테스트

이제 테스트 기기에서 앱 작업을 사용해 볼 차례입니다.

테스트 기기를 연결하고 테스트 도구를 사용하여 앱 작업을 테스트합니다.

  1. Tools > App Actions > App Actions Test Tool로 이동합니다. Android 스튜디오에 로그인하라는 메시지가 표시될 수 있습니다. Google Play Console에서 사용했던 것과 동일한 계정을 사용합니다.
  2. Invocation Name 필드에 'Fit Actions'를 입력합니다.
  3. 어시스턴트의 언어가 'English (US)'가 아닌 경우 Locale 필드에 어시스턴트 언어와 일치하는 언어를 입력합니다.
  4. Create Preview를 클릭합니다.
  5. Configure 드롭다운 목록을 사용하여 테스트할 내장 인텐트를 선택합니다.
  6. Run을 클릭합니다. Google에서 열 수 있는 옵션이 표시되면 '항상'을 선택하여 어시스턴트가 지원하는 링크를 열 수 있도록 합니다(나중에 앱 설정에서 변경 가능).

앱 작업 테스트 도구는 앱 작업의 미리보기를 만들거나 업데이트할 때 단일 Google 계정을 위해서 하며, 일시적으로 정의된 앱 작업을 등록합니다. 미리보기를 사용하면 개발자는 프로덕션 버전의 앱을 Google Play Console에 배포하기 전에 어시스턴트가 앱 작업을 인식하게 할 수 있습니다.

테스트 도구가 앱의 내장 인텐트를 가져오면, 인텐트에 매개변수 값을 직접 제공하고 Android 스튜디오에서 앱 작업을 트리거할 수 있습니다.

또는 기기의 어시스턴트 앱에서 호출 이름을 직접 사용하여 앱 작업을 시도해 볼 수 있습니다. 예를 들어 "Hey Google, Fit Actions에서 달리기 시작"이라고 말하면 운동 타이머를 시작하는 앱 작업을 실행할 수 있습니다.

이제 Google 어시스턴트를 통해 피트니스 앱에서 운동 타이머를 시작 및 중지할 수 있으나 특정 운동만 인식된다는 사실을 눈치채셨을 수도 있습니다. "Fit Actions에서 수영 시작" 또는 "Fit Actions에서 하이킹 시작"과 같이 요청하면 '알 수 없는 활동 시작...'으로 시작되는 타이머가 표시됩니다.

그 이유는 현재 샘플 앱에서 지원되는 운동 유형이 '달리기', '자전거 타기', '걷기'뿐이기 때문입니다. 이 앱을 사용하여 다른 운동을 추적하려는 사용자를 지원하려면 어떻게 해야 할까요?

이 앱의 경우, 다음 몇 가지 방법으로 지원되는 운동 유형의 수를 늘릴 수 있습니다.

  • 수영 및 하이킹 같은 더 많은 운동 유형에 관한 앱 지원을 추가합니다(actions.intent.START_EXERCISE 내장 인텐트를 위한 지원되는 텍스트 필드 값에 따라 제한됨).
  • '하이킹'과 같은 지원되는 다른 운동 유형을 앱에서 지원하는 '걷기'와 같은 다른 유형에 매핑합니다.

더 많은 운동 유형 지원을 추가하는 경우, 사용자가 원하는 운동을 기반으로 앱에서 더 많은 경로를 연결할 수 있습니다. 이는 사용자를 도울 수 있는 한 가지 방법으로 앱이 다양한 운동에 다른 작업을 수행할 수 있는 경우에 적합한 선택입니다.

피트니스 앱의 경우 두 번째 옵션을 사용하여 Google 어시스턴트를 더 잘 활용할 수 있습니다. 그러면 사용자가 지원되는 다른 텍스트 필드 값이 포함된 쿼리를 사용하여 타이머를 시작할 수 있습니다. 이 Codelab에서는 인라인 인벤토리를 사용하여 '하이킹 시작'을 '걷기 시작' 앱 기능에 매핑합니다.

인라인 인벤토리

인라인 인벤토리는 어시스턴트로 앱 작업을 트리거할 때 사용자가 포함할 것으로 앱에서 예상하는 특정 항목을 정의합니다. actions.xml 파일에 인라인 인벤토리를 추가하여 사용자에게 지원되는 옵션 목록을 직접 생성합니다. 인벤토리 항목은 요소로 그룹화되며, 작업 정의는 항목 집합을 참조하여 매개변수 매핑에 사용할 수 있습니다.

앞서 언급했듯이 샘플 앱에는 '달리기', '자전거 타기', '걷기'를 지원하는 기능이 있습니다. 항목 세트를 만들고 actions.intent.START_EXERCISE에서 이를 참조하게 하여 앱에서 딥 링크의 항목 식별자만 사용하면 되게 합니다.

actions.xml

<actions>
    <action intentName="actions.intent.START_EXERCISE">
        ...

        <!-- Map a parameter to an entity set reference -->
        <parameter name="exercise.name">
            <entity-set-reference entitySetId="ExerciseEntitySet" />
        </parameter>
    </action>
    ...

    <!-- Define an inline inventory -->
    <!-- This sample maps supported entities with the class FitActivity.Type -->
    <entity-set entitySetId="ExerciseEntitySet">
        <entity
            name="@string/activity_running"
            identifier="RUNNING" />
        <entity
            name="@string/activity_walking"
            identifier="WALKING" />
        <entity
            name="@string/activity_hiking"
            identifier="WALKING" />
        <entity
            name="@string/activity_cycling"
            identifier="CYCLING" />
    </entity-set>
</actions>

인라인 인벤토리의 각 요소는 사용자 쿼리의 고유한 일치를 나타냅니다. 항목을 통해 어시스턴트가 달리기, 걷기, 자전거 타기와 같은 지원되는 입력을 구분할 수 있습니다. 특히 이 기능은 어시스턴트가 메뉴 항목이나 서비스 등 앱과 관련된 특정 정보를 인식하도록 하려는 경우에 유용합니다.

'하이킹' 문자열에 대한 항목을 추가하면 걷기를 위해 이미 구축한 기능을 이용할 수 있습니다.

인벤토리 테스트

테스트 도구에서 미리보기를 만들거나 업데이트하여 앱을 위해 등록된 내장 인텐트를 가져옵니다. 그런 다음 인텐트에 매개변수 값을 직접 제공하고 Android 스튜디오에서 앱 작업을 트리거할 수 있습니다.

앱 작업 테스트 도구에서 인벤토리를 사용해 봅니다.

  1. Update Preview를 클릭합니다.
  2. Update Preview 드롭다운 목록에서 'actions.intent.START_EXERCISE'를 선택합니다.
  3. exercise.name 필드에 '하이킹'을 입력합니다.
  4. Update Preview 드롭다운 목록에서 기기를 선택합니다.
  5. Run을 클릭합니다.

앱 작업 테스트 도구는' 하이킹' 입력을 사용하여 테스트 기기에서 걷기용 운동 타이머를 시작합니다.

축하합니다

앱 작업을 Android 앱에 추가하는 데 필요한 기술을 배웠습니다.

학습한 내용

  • 사용자가 앱 작업을 통해 트리거할 수 있는 해당 내장 인텐트가 있는 Android 활동을 확인하는 방법
  • 내장 인텐트에서 Android 앱으로 매개변수를 전달하는 방법
  • 인라인 인벤토리를 사용하여 지원되는 값을 앱 기능 식별자에 매핑하는 방법
  • Android 스튜디오에서 앱 작업을 테스트하는 방법

다음 단계

여기에서 피트니스 앱을 더욱 세분화할 수 있습니다. 몇 가지 아이디어를 제공하기 위해 GitHub의 저장소 master 분기에 앱의 확장된 버전이 제공되어 있습니다. 확장된 버전에서는 Android Slice를 사용하여 어시스턴트를 통해 운동 정보를 추가로 제공합니다. 또한 프로덕션 Android 앱을 위한 앱 작업 배포 요구사항도 나와 있습니다.

Actions on Google에 관해 자세히 알아보려면 다음 리소스를 참조하세요.

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

의견 설문조사

종료하기 전에 Codelab 개선을 위한 설문조사에 참여해 주세요. 문제가 발생했는지, 단계를 완료하기 위해 추가 정보가 필요했는지, 또는 모든 것이 원활하게 진행되었는지 알려주세요.