GooglePlay 개발자 계정 생성 후 콘솔에 앱 등록하고 제품 등록 후 테스트.
테스트를 위해서는 구글 개발자 계정이 존재 해야함.
GooglePlay Console에서 상품 세팅 및 테스트 계정 세팅을 할 수 있음.

(25.1월 기준)
flutter in app purchase는 GooglePlay Billing Library 6.2.0을 사용 중. 6.2.0의 minSdkVersion은 21미만. Android 11은 30.
외부 결제 수단 선택까지 가능하게 API 뚫려 있음(테스트 필요)
프로모션 또는 프로모션 코드를 사용하려면 한정된 수의 사용자에게 무료로 일회성 제품이나 정기 결제 무료 체험판을 제공할 수 있습니다.
사용자는 앱 또는 Google Play 스토어 앱에서 프로모션 코드를 입력하고 무료로 해당 항목 또는 정기 결제 무료 체험판을 받습니다.
Play Console내에서 다음 유형의 프로모션 코드를 생성할 수 있습니다.
일회용 코드: 자동으로 생성되는 고유한 코드로, 사용자가 한 번만 사용 가능.
맞춤 코드: 미리 정해진 한도까지 여러 번 사용할 수 있는 맞춤 코드를 지정할 수 있습니다.(정기 결제용으로만 제공) 이전에 정기 결제를 이용해 본 적이 없는 사용자만 사용 가능
프로모션 코드는 무료 정기 결제가 아닌 정기 결제에 대한 무료 체험판을 제공하는 것 입니다.
프로모션은 다른 무료 체험판의 기간을 연장하지 않습니다. 프로모션 코드를 입력할 필요 없이 시작한 무료 체험판의 경우 프로모션이 원래 무료 체험판 기간보다 우선 적용됩니다.
프로모션 이외의 무료 체험판을 사용할 수 있는 대상이 아닌 사용자(예: 과거에 이미 정기 결제를 구매한 사용자)도 프로모션을 통한 무료 체험판은 이용할 수 있습니다.
사용자는 Play Console에 지정된 프로모션 종료일까지 Google Play 스토어에서 프로모션 코드를 사용할 수 있습니다.
프로모션은 최대 1년까지 진행할 수 있습니다. 프로모션을 구현하기 전에 다음 사항들에 대해 고려해야 합니다.
일회성 제품의 경우, 한 앱의 모든 관리 제품에 대해 "분기당 최대 500개의 프로모션 코드"를 만들 수 있습니다. 하나 이상의 일회성 제품이 포함된 다양한 프로모션 코드 조합을 사용할 수 있습니다. (아래 예시 참조)
일회성 제품 1개의 프로모션 코드 500개
5개의 서로 다른 일회성 제품 각각의 프로모션 코드 100개
정기 결제 프로모션의 경우, "정기 결제 제품마다 분기당 최대 10,000개의 일회용 코드"를 만들 수 있습니다. 이 한도는 일회성 제품의 프로모션 한도를 계산하는 데는 포함되지 않습니다.
맞춤 코드로 정기 결제 프로모션을 생성할 때는 사용한도를 2,000개에서 99,999개 사이에서 선택할 수 있습니다.
- 프로모션을 만든 후에는 해당 프로모션의 프로모션 코드 개수를 변경할 수 없으며, 해당 프로모션 코드를 다른 유형으로 전환할 수 없습니다.
- 분기 내에 프로모션 코드를 모두 사용하지 않으면 남은 프로모션 코드는 더 이상 사용할 수 없게 됩니다. 사용하지 않은 코드는 다음 분기로 이월되지 않습니다.
Play Console에서 프로모션을 생성하면 프로모션 코드를 통해 사용자에게 유료 앱, 인앱 상품 또는 정기 결제 상품을 무료로 제공할 수 있습니다. 프로모션 코드에는 두 가지 유형이 있습니다.
일회용 코드: 자동으로 생성된 고유한 코드로 한 번 사용할 수 있습니다. 사용자는 Google Play 또는 앱에서 일회용 코드를 직접 사용할 수 있습니다.
맞춤 코드: 개발자가 지정한 맞춤 코드로서 여러 번 또는 개발자가 사전에 정의한 한도까지 사용할 수 있습니다. 맞춤 코드는 앱 내에서만 사용할 수 있습니다. 또한 정기 결제용으로만 제공되며 이전에 정기 결제를 이용해 본 적이 없는 사용자만 사용할 수 있습니다. 프로모션 자격 기준을 사용자에게 명확하게 설명해야 합니다.
중요: 프로모션 혜택에 관한 정보는 투명하게 공개해야 하며, 혜택 약관에 관해서도 명확하게 설명해야 합니다. 사용자가 정보를 검토하기 위해 추가적인 작업을 할 필요가 없어야 합니다. 앱이 Google의 정책을 준수하는지 확인하려면 개발자 정책 센터에서 정기 결제 정책을 검토하세요.
정기 결제 프로모션 코드는 사용자에게 3~90일 무료 체험판을 제공합니다. 프로모션 코드를 생성할 정기 결제를 선택하면 해당 정기 결제와 하위 호환되는 기본 요금제가 사용됩니다. 혜택에 이미 무료 체험판이나 다른 혜택이 있는 경우 프로모션 코드 무료 체험판 기간으로 대체됩니다.
프로모션 설정하기
- 앱에서 프로모션 코드를 사용할 수 있도록 설정하기
- 프로모션 코드 한도 및 사용 가능 여부 검토하기
- Play Console에서 프로모션 설정하기
정기 결제용 프로모션 코드 및 혜택 비교
프로모션 코드 종류
| -- | 신규 고객 확보 혜택 | 업그레이드 혜택 | 개발자가 결정하는 혜택 | 일회용 프로모션 코드 | 맞춤 프로모션 코드 |
|---|---|---|---|---|---|
| 용도 | 신규 사용자 확보 | 사용자 업그레이드, 다운그레이드, 크로스 그레이드 | 직접 결정 | 사용자 확보 및 유지 | 신규 사용자 확보 |
| 혜택 | 무료 체험판 또는 신규 할인 가격 단계 | 무료 체험판 또는 신규 할인 가격 | 단계 무료 체험판 또는 신규 할인 가격 단계 | 무료 체험판 1개 | 무료 체험판 1개 |
| 자격요건 | 신규 정기 결제 이용자 | 현재 정기 결제 이용자 | 직접 결정 | 신규, 현재 또는 이전 정기 결제 이용자 | 신규 정기 결제 이용자 |
| 탐색 및 구매 | 앱 또는 Play 스토어 내에서 | 앱 또는 Play 스토어 내에서 | 앱 내에서만 | 어떤 방법으로든 배포할 수 있으며, 앱 또는 Play 스토어 내에서 사용 가능 | 앱 내에서만 |
구매 흐름
// deeplink 주소
https://play.google.com/redeem?code=promo_code

queryPurchasesAsync를 호출하여 사용자의 구매를 쿼리할 때#1의 경우 앱이 실행 중이고 활성 Google Play 결제 라이브러리 연결이 있는 한 새 구매 또는 완료된 구매에 대해 onPurchasesUpdated가 자동으로 호출됩니다. 애플리케이션이 실행 중이 아니거나 앱에 활성 Google Play 결제 라이브러리 연결이 없는 경우 onPurchasesUpdated이 호출되지 않습니다. 앱이 포그라운드에 있는 동안에는 앱이 적시에 구매 업데이트를 받을 수 있도록 활성 연결을 유지하는 것이 좋습니다.
2의 경우 앱이 모든 구매를 처리할 수 있도록 BillingClient.queryPurchasesAsync()를 호출해야 합니다. 앱이 Google Play 결제 라이브러리와 연결을 성공적으로 설정할 때 이 작업을 실행하는 것이 좋습니다. 이는 BillingClient 초기화에서 설명한 대로 앱이 실행되거나 포그라운드로 전환될 때 권장됩니다. 이는 onServiceConnected의 성공 결과를 수신할 때 queryPurchasesAsync를 호출하여 실행할 수 있습니다. 다음과 같은 이벤트와 상황을 처리하려면 이 권장사항을 따르는 것이 중요합니다.
구매 중 네트워크 문제: 사용자가 구매를 성공적으로 완료하고 Google에서 확인을 받았지만 기기와 앱이 PurchasesUpdatedListener를 통해 구매 알림을 받기 전에 기기의 네트워크 연결이 끊어졌습니다.
여러 기기: 사용자가 한 기기에서 상품을 구매한 후 기기를 전환할 때 이 상품이 표시되기를 기대할 수 있습니다.
앱 외부에서 이루어진 구매 처리: 프로모션 사용과 같은 일부 구매는 앱 외부에서 이루어질 수 있습니다.
구매 상태 전환 처리: 애플리케이션이 실행되지 않는 동안 사용자가 대기 중인 구매에 대한 결제를 완료하고 앱을 열 때 구매가 완료되었다는 확인을 받을 수 있습니다.
실시간 개발자 알림을 수신 대기하여 이벤트가 발생할 때 사용자가 앱을 사용하지 않더라도 새 구매 및 완료된 대기 중인 구매에 관해 실시간으로 알림을 받을 수도 있습니다. 이렇게 하면 항상 백엔드 상태를 동기화할 수 있습니다. 자세한 내용은 일회성 구매 및 정기 결제의 백엔드 통합 섹션을 참고하세요.
앱에서 새 구매 또는 완료된 구매를 감지하면 다음을 실행해야 합니다.
구매를 인증합니다.
완료된 구매에 대해 사용자에게 콘텐츠를 부여합니다.
사용자에게 알립니다.
앱에서 완료된 구매를 처리했음을 Google에 알립니다.
이러한 단계는 다음 섹션에서 자세히 설명한 후 모든 단계를 요약하는 섹션이 이어집니다.
구매 확인
앱은 사용자에게 혜택을 부여하기 전에 항상 구매가 적법한지 확인해야 합니다. 자격을 부여하기 전에 구매 확인에 설명된 가이드라인에 따라 이 작업을 실행할 수 있습니다. 구매를 확인한 후에만 앱에서 구매를 계속 처리하고 사용자에게 사용 권한을 부여해야 합니다(다음 섹션 참고).
사용자에게 사용 권한 부여
앱에서 구매를 확인하면 계속해서 사용자에게 사용 권한을 부여하고 사용자에게 알릴 수 있습니다. 자격을 부여하기 전에 앱에서 구매 상태가 PURCHASED인지 확인해야 합니다. 구매가 대기 중인 상태인 경우 앱은 사용자에게 자격이 부여되기 전에 구매를 완료하기 위해 아직 작업을 완료해야 한다고 알려야 합니다. 구매가 PENDING에서 SUCCESS로 전환될 때만 사용 권한을 부여합니다. 자세한 내용은 대기 중인 거래 처리를 참고하세요.
사용자 식별자 연결에 설명된 대로 구매에 사용자 식별자를 연결한 경우 이를 검색하여 시스템에서 올바른 사용자에게 기여도를 부여할 수 있습니다. 이 기법은 앱에서 구매 대상 사용자에 관한 컨텍스트를 잃을 수 있는 구매를 조정할 때 유용합니다. 앱 외부에서 이루어진 구매에는 이러한 식별자가 설정되지 않습니다. 이 경우 앱은 로그인한 사용자에게 사용 권한을 부여하거나 사용자에게 원하는 계정을 선택하라는 메시지를 표시할 수 있습니다.
사용자에게 알리기
사용자에게 사용 권한을 부여한 후 앱은 구매가 완료되었음을 확인하는 알림을 표시해야 합니다. 이렇게 하면 사용자가 구매가 완료되었는지 혼동하지 않아 앱 사용을 중지하거나 사용자 지원팀에 문의하거나 소셜 미디어에 불만을 제기하는 일이 방지됩니다. 앱은 애플리케이션 수명 주기 중 언제든지 구매 업데이트를 감지할 수 있습니다. 예를 들어 부모가 다른 기기에서 대기 중인 구매를 승인하는 경우 앱은 적절한 시점에 사용자에게 알리는 것을 지연할 수 있습니다. 지연이 적절한 경우의 예는 다음과 같습니다.
게임이나 컷신의 액션 플레이 중에 메시지를 표시하면 사용자의 주의가 산만해질 수 있습니다. 이 경우 액션 플레이가 끝난 후에 사용자에게 알려야 합니다.
게임의 초기 튜토리얼 및 사용자 설정 중에도 사용자에게 즉시 알리지 않아도 됩니다. 예를 들어 사용자가 앱을 설치하기 전에 앱 외부에서 구매했을 수 있습니다. 신규 사용자가 게임을 연 직후 또는 처음 사용자 설정 중에 리워드를 알리는 것이 좋습니다. 앱에서 사용자에게 사용 권한을 부여하기 전에 계정을 만들거나 로그인해야 하는 경우 사용자에게 구매 항목을 소유하기 위해 완료해야 하는 단계를 알리는 것이 좋습니다. 앱에서 구매를 처리하지 않으면 3일 후에 구매가 환불되므로 이는 중요합니다.