인앱 프로모션 AIDL 참조 문서

경고: AIDL은 현재 지원이 중단되었으며 향후 출시되는 버전에서 삭제될 예정입니다. Google Play 결제 기능을 구현하려면 Google Play 결제 라이브러리를 사용하세요.

이 문서에서는 Google Play Billing AIDL API를 사용하여 프로모션을 만들기 위한 기술 참조 정보를 제공합니다.

프로모션 코드를 통해 한정된 수의 사용자에게 콘텐츠나 기능을 무료로 제공할 수 있습니다. 프로모션 코드를 생성한 후 서비스 약관에 따라 배포하세요. 사용자는 개발자의 앱이나 Google Play 스토어 앱에 프로모션 코드를 입력하여 무료로 아이템을 받을 수 있습니다. 다음과 같은 여러 방법으로 프로모션 코드를 활용하여 창의적으로 사용자의 참여를 유도하세요.

  • 게임에서 특정 이벤트에 참가하는 플레이어에게만 캐릭터나 장식과 같은 특수한 아이템을 제공하는 경우가 있습니다. 개발자가 이벤트에서 프로모션 코드가 있는 카드를 배포하면 사용자는 프로모션 코드를 입력하여 아이템을 받을 수 있습니다.
  • 앱 개발자는 잠재적 사용자가 앱을 사용해 볼 수 있도록 현지 업체에 프로모션 코드를 배포할 수 있습니다.
  • 앱 개발자는 직원에게 친구 및 가족 코드를 제공하여 친구와 공유하도록 유도할 수 있습니다.

모든 프로모션 코드는 특정 제품 ID(SKU라고도 함)와 연결됩니다. 개발자는 기존 인앱 상품의 프로모션 코드를 생성할 수 있습니다. SKU를 Play 스토어와 별도로 관리하여 SKU의 프로모션 코드를 입력해야만 특정 아이템을 받도록 설정할 수도 있습니다. 사용자가 Play 스토어나 앱에서 프로모션 코드를 입력하면 아이템을 구매했을 때와 동일하게 아이템을 받게 됩니다. 앱에서 인앱 구매를 지원하기 위해 이미 In-app Billing API 버전 3 이상을 사용하고 있다면 프로모션 코드 지원을 쉽게 추가할 수 있습니다.

프로모션 코드 생성 및 사용

Google Play Console을 통해 프로모션 코드를 생성합니다. 각 프로모션 코드는 Play Console에 등록된 단일 제품과 연결됩니다.

사용자는 다음 두 가지 방법 중 하나로 프로모션 코드를 사용할 수 있습니다.

  • 인앱 결제 구현에 설명된 대로 사용자는 앱의 일반적인 구매 흐름에서 프로모션 코드를 입력할 수 있습니다. 해당 앱과 관련이 있는 한, 일반 구매와 동일한 방식이나 사용자가 돈 대신 프로모션 코드로 결제한다는 점이 다릅니다.
  • 사용자는 Google Play 스토어 앱에서 코드를 사용할 수 있습니다. 사용자가 Google Play 스토어 앱에서 수동으로 코드를 입력하거나 개발자가 Google Play 스토어에 코드를 자동으로 제공하는 URL을 앱에서 생성할 수 있습니다. 자동으로 코드를 제공하려면 다음 구조로 된 URL을 생성하여 실행하고 <code>를 프로모션 코드로 대체하세요.
    https://play.google.com/redeem?code=<code>
    다음 예를 참조하세요.
    https://play.google.com/redeem?code=bvlkfdxkjghlkgdhlkj
    Android 앱에서 Google Play로 연결되는 링크를 생성하는 방법을 알아보려면 Google Play에 연결을 참조하세요. 코드를 입력하면 Play 스토어에서 사용자에게 앱을 열거나(최신 버전이 설치된 경우) 다운로드 또는 업데이트하라는 메시지를 표시합니다.

앱에서 프로모션 코드 지원

프로모션 코드를 지원하려면 앱이 시작되거나 다시 시작될 때마다 앱에서 getPurchases() 메서드를 호출해야 합니다. 이 메서드는 사용자가 프로모션 코드를 사용하여 구매한 모든 내역을 포함하여 현재 소비되지 않은 모든 구매를 번들로 반환합니다. 가장 간단한 방법은 활동의 onResume() 메서드에서 getPurchases()를 호출하는 것입니다. 활동이 생성될 때와 활동의 일시중지가 해제될 때 이 콜백이 실행되기 때문입니다. 앱이 시작될 때와 다시 시작될 때 getPurchases()를 호출하면 앱이 실행되지 않는 동안 사용자가 진행했을 수 있는 모든 구매 및 사용 내역을 앱에서 찾을 수 있습니다. 또한 앱이 실행 중일 때 사용자가 구매했으나 어떤 이유로든 앱에서 사용자의 구매를 놓친 경우 다음에 활동이 다시 시작될 때 getPurchases()를 호출하면 앱에서 구매 내역을 파악할 수 있습니다.

앱에서는 사용자가 앱에서 프로모션 코드를 사용할 수 있도록 해야 합니다. 앱에서 인앱 구매 워크플로(인앱 결제 요청에 설명되어 있음)를 지원하는 경우 프로모션 코드의 인앱 사용을 자동으로 지원합니다. 인앱 구매 UI를 실행하면 사용자는 onActivityResult() 메서드로 구매 대금을 지불할 수 있습니다. 이 메서드는 앱에 구매 완료 여부를 알려주는 응답 인텐트를 받습니다. 그러나 구매 및 소비 워크플로가 완료되지 않은 경우에는 계속해서 앱이 시작될 때와 다시 시작될 때 getPurchases()를 호출해야 합니다. 예를 들어 사용자가 프로모션 코드 사용을 완료했는데 아이템을 소비하기 전에 앱이 다운되면 다음 시작 시 앱에서 getPurchases()를 호출할 때 구매에 관한 정보를 계속 받습니다.

앱은 앱 실행 중에 사용자가 Play 스토어 앱에서 프로모션 코드를 사용하는 시나리오도 지원해야 합니다. PURCHASES_UPDATED 인텐트의 리스너를 등록하면 사용자가 코드를 사용하는 즉시 앱에서 확인할 수 있습니다. Play 스토어에서는 사용자가 프로모션 코드를 사용할 때마다 이 인텐트를 실행합니다.

PURCHASES_UPDATED 인텐트를 수신하려면 동적으로 BroadcastReceiver 객체를 생성하고 com.android.vending.billing.PURCHASES_UPDATED를 수신하도록 등록합니다. 활동의 onResume() 메서드에 다음과 유사한 코드를 삽입하여 수신자를 등록하세요.

Kotlin

val filter = IntentFilter("com.android.vending.billing.PURCHASES_UPDATED")

자바

IntentFilter filter = new IntentFilter("com.android.vending.billing.PURCHASES_UPDATED");

사용자가 구매하면 시스템에서 broadcast receiver의 onReceive() 메서드를 호출합니다. 이 메서드는 getPurchases()를 호출하여 사용자가 무엇을 구매했는지 확인해야 합니다.

앱이 실행되지 않을 때 시스템 오버헤드를 줄이려면 활동의 onPause() 메서드에서 broadcast receiver를 등록 취소해야 합니다.

Kotlin

unRegisterReceiver(myPromoReceiver);

자바

unRegisterReceiver(myPromoReceiver);

참고: 앱 매니페스트에 이 broadcast receiver를 등록하지 마세요. 매니페스트에 receiver를 선언하면 앱이 실행되고 있지 않을 때 사용자가 구매할 경우 시스템에서 인텐트를 처리하기 위해 앱을 실행할 수 있습니다. 이는 사용자를 성가시게 할 수 있는 불필요한 동작입니다. 앱이 실행되고 있지 않을 때 사용자가 구매한 항목을 확인하려면 사용자가 앱을 실행할 때 getPurchases()를 호출하세요.

인앱 프로모션 테스트

앱에서 인앱 프로모션을 지원하는 경우 다음 사용 사례를 테스트하세요.

사용자가 앱에서 프로모션 코드를 사용하는 경우

인앱 결제 요청에 설명된 대로 사용자가 앱의 구매 흐름에서 프로모션 코드를 사용하는 경우, 시스템에서는 활동의 onActivityResult() 메서드를 호출하여 구매를 처리합니다. 사용자가 돈으로 지불하든 프로모션 코드로 지불하든, onActivityResult()에서 구매를 적절히 처리하는지 확인하세요.

사용자가 Google Play 스토어에서 프로모션 코드를 사용하는 경우

사용자가 Play 스토어에서 프로모션 코드를 사용하는 경우 아래와 같이 몇 가지 워크플로가 가능합니다. 각 워크플로를 확인해보세요.

앱이 설치되어 있지 않음

사용자가 기기에 설치되지 않은 앱의 프로모션 코드를 사용하는 경우 Play 스토어에서 사용자에게 앱을 설치하라는 메시지를 표시합니다. 앱이 설치되었지만 최신 버전이 아닌 경우 Play 스토어에서 사용자에게 앱을 업데이트하라는 메시지를 표시합니다. 앱이 설치되지 않은 기기에서 다음 시퀀스를 테스트합니다.

  1. 사용자가 Play 스토어에서 앱의 프로모션 코드를 사용합니다. Play 스토어에서 사용자에게 앱을 설치하라는 메시지를 표시합니다.
  2. 사용자가 앱을 설치하고 시작합니다. 앱이 시작될 때 getPurchases()를 호출하고 사용자가 프로모션 코드로 구매한 항목을 올바르게 감지하는지 확인합니다.

앱이 설치되어 있지만 실행 중이 아님

사용자가 기기에 설치된 앱의 프로모션 코드를 사용하면, Play 스토어에서 사용자에게 앱으로 전환하라는 메시지를 표시합니다. 앱이 설치되었지만 실행되고 있지 않은 기기에서 다음 시퀀스를 테스트합니다.

  1. 사용자가 Play 스토어에서 앱의 프로모션 코드를 사용합니다. Play 스토어에서 사용자에게 앱으로 전환하라는 메시지를 표시합니다.
  2. 사용자가 앱을 시작합니다. 앱이 시작될 때 getPurchases()를 호출하고 사용자가 프로모션 코드로 구매한 항목을 올바르게 감지하는지 확인합니다.

앱이 설치되어 있고 실행 중임

사용자가 기기에서 현재 실행 중인 앱의 프로모션 코드를 사용하는 경우 Play 스토어에서는 PURCHASES_UPDATED 인텐트를 통해 앱에 알립니다. 다음 시퀀스를 테스트합니다.

  1. 사용자가 앱을 시작합니다. 앱이 PURCHASES_UPDATED 인텐트를 수신하도록 적절히 등록되었는지 확인합니다.
  2. 사용자가 직접 또는 프로모션 코드를 포함하는 생성된 URL을 사용하여 Play 스토어 앱을 시작하고 앱의 프로모션 코드를 사용합니다. Play 스토어가 PURCHASES_UPDATED 인텐트를 실행합니다. 인텐트를 처리하기 위해 앱의 onReceive() 콜백이 실행되는지 확인합니다.
  3. onReceive() 메서드에서 getPurchases()를 호출하여 인텐트에 응답해야 합니다. 앱에서 이 메서드를 호출하고 사용자가 프로모션 코드로 구매한 항목을 올바르게 감지하는지 확인합니다.
  4. 사용자가 앱으로 다시 전환합니다. 사용자가 구매한 아이템이 있는지 확인합니다.