포그라운드 앱 호출

앱 작업을 통해 사용자는 Google 어시스턴트와 대화하고 "Hey Google, Example 앱에서 차량 예약해 줘"와 같이 말하면 특정 앱 대상으로 바로 이동할 수 있습니다. 포그라운드 앱 호출을 사용하면 사용자가 이미 앱을 연 경우 환경을 추가로 개선할 수 있습니다.

포그라운드 앱 호출을 사용하면 특정 활동이 기기 포그라운드에 있는 동안 앱 이름을 언급할 필요 없이 내장 인텐트 (BII)를 일치시킬 수 있습니다.

예를 들어 포그라운드에 차량 공유 앱이 있는 사용자가 Google 어시스턴트에 "마운틴 뷰로 가는 차량 예약해 줘"라고 말하거나 입력합니다. 앱은 이 입력을 사용하여 목적지 필드를 마운틴 뷰로 설정합니다. 그런 다음 사용자가 '샌프란시스코 국제공항에서 출발하는 차량 예약해 줘'라고 말하거나 입력하면 앱에서 앱의 상태를 유지하면서 승차 위치를 설정할 수 있습니다.

제한사항

포그라운드 앱 호출은 다음 내장 인텐트(BII)에만 사용할 수 있습니다.

특정 BII의 포그라운드 앱 호출과 관련된 언어 지원 및 쿼리 예를 보려면 내장 인텐트 참조를 확인하세요.

포그라운드 앱 호출 지원

포그라운드 앱 호출 지원을 추가하려면 원하는 포그라운드 활동에 기반하여 처리 동작을 추가해야 합니다. 이러한 활동이 포그라운드에 있고 앱 작업이 호출될 때 어시스턴트는 추가 플래그와 함께 딥 링크 인텐트를 해당 활동에 전달하므로 앱에서 상태를 업데이트할 수 있습니다.

BII의 포그라운드 앱 호출을 구현하려면 다음 단계를 따르세요.

  1. shortcuts.xml 파일에서 포그라운드 앱 호출을 지원하려는 BII <capability><intent> 태그를 추가합니다.
  2. <intent> 태그 내에서 <extra> 태그를 추가합니다.
  3. <extra> 태그에서 android:key"requiredForegroundActivity"로 설정하고 android:value를 포그라운드에 있어야 하는 활동으로 설정합니다. 활동을 지정할 때는 클래스 약어 없이 앱 패키지 이름, 슬래시 (/), 활동 이름 APP_PACKAGE_NAME/ACTIVITY_NAME를 차례로 입력합니다.
  4. "requiredForegroundActivity"에 지정한 포그라운드 활동에서 onNewIntent() 메서드를 구현하여 SINGLE_TOP 플래그가 설정된 딥 링크 인텐트를 처리합니다. 어시스턴트는 지정된 활동이 포그라운드에 있을 때 이 플래그가 있는 딥 링크 인텐트를 처리로 전달합니다.
  5. onNewIntent() 호출을 포그라운드 활동의 업데이트로 취급하고 딥 링크에서 추출된 매개변수를 사용하여 이 활동의 상태를 관리합니다.

앱에서 라우터 활동을 사용하여 모든 외부 딥 링크가 단일 게이트키핑 라우터 활동을 트리거하도록 하는 경우 라우터 활동 처리를 참고하세요.

shortcuts.xml 파일 예의 다음 스니펫은 requiredForegroundActivity 속성을 추가하는 방법을 보여줍니다.

  <capability name="actions.intent.CREATE_TAXI_RESERVATION">
      <!-- Trigger with foreground app invocation if MainActivity is in the foreground. -->
      <intent
          android:targetClass="com.example.app.MainActivity"
          android:targetPackage="com.example.app">
          <parameter
              android:name="taxiReservation.dropoffLocation.name"
              android:key="dropoff" />
          <extra
              android:key="requiredForegroundActivity"
              android:value="com.example.app/com.example.app.MainActivity" />
      </intent>
      <!-- This won't trigger if MainActivity is in the foreground. -->
      <intent
          android:targetClass="com.example.app.MainActivity"
          android:targetPackage="com.example.app">
          <parameter
              android:name="taxiReservation.dropoffLocation.name"
              android:key="dropoff" />
      </intent>
  </capability>

사용자 권한

기기 설정에서 사용자는 포그라운드 앱 호출이 작동하도록 &#39;화면의 텍스트 사용&#39;을 사용 설정해야 합니다.

사용자에 대해 포그라운드 앱 호출이 작동하려면 사용자가 화면의 텍스트 사용 기기 설정을 사용 설정해야 합니다. 이 설정의 위치와 정확한 이름은 OEM 또는 기기 제조업체에 따라 다를 수 있습니다. 예를 들어 기기 설정을 사용자 기기에서 화면 컨텍스트 사용이라고 할 수도 있습니다.

Pixel 휴대전화에서 이 Android 설정으로 이동하려면 먼저 설정 > 앱 및 알림 > 기본 앱 > 지원 앱으로 이동합니다. 그런 다음 지원 및 음성 입력 화면에서 화면의 텍스트 사용을 사용 설정합니다.

호출 테스트

포그라운드 앱 호출을 사용해 보려면 다음 단계를 따르세요.

  1. 사용자 권한 섹션의 안내에 따라 화면의 텍스트 사용 기기 설정을 사용 설정합니다.
  2. 필수 포그라운드 활동으로 나열된 활동으로 앱을 엽니다.
  3. 홈 버튼을 길게 눌러 현재 앱에서 어시스턴트를 오버레이로 엽니다. 앱 이름 자체를 언급하지 않고 구현한 BII에 상응하는 쿼리를 제공합니다. 성공하면 앱이 상태를 유지하고 활동을 다시 시작하지 않으면서 쿼리를 기반으로 자체적으로 업데이트됩니다.

라우터 활동 처리

일부 앱은 단일 게이트키핑 라우터 활동을 사용하여 모든 외부 딥 링크를 처리합니다. 그런 다음 라우터 활동은 적절한 비즈니스 로직 활동(확인 및 검증 후)을 시작하고 비즈니스 로직 활동을 포그라운드에 반환합니다.

딥 링크를 트리거하면 라우터 활동이 포그라운드 활동 위의 작업 스택 상단에 추가될 수 있습니다. 라우터 활동을 사용하는 앱의 경우 라우터 활동이 Google 어시스턴트로부터 전송된 인텐트를 현재 포그라운드 활동 인스턴스로 전달하도록 해야 합니다. 이러한 요구사항을 달성하는 방법은 라우터 활동이 시작되는 위치에 따라 달라집니다.

라우터가 비즈니스 로직 활동과 동일한 작업 스택에서 시작되는 경우 SINGLE_TOP, CLEAR_TOP, NEW_TASK의 비트 OR을 사용하여 인텐트를 전달합니다.

Kotlin

Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK

Java

Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK

라우터가 비즈니스 로직 활동과 별도의 작업 스택에서 시작되는 경우 SINGLE_TOP 플래그가 있는 인텐트를 비즈니스 로직 활동으로 전달합니다.