본문 바로가기

Effective */Effective Android

[Google Play 인앱 개념] 결제 라이브러리 통합 1

developer.android.com/google/play/billing/integrate

 

앱에 Google Play 결제 라이브러리 통합  |  Google Play 결제 시스템  |  Android Developers

중요: 앱이 현재 AIDL을 사용하여 Google Play 결제 시스템을 통합하는 경우 AIDL에서 Google Play 결제 라이브러리로 이전하는 데 필요한 단계에 관한 대략적인 개요는 AIDL에서 Google Play 결제 라이브러리

developer.android.com

구매 흐름 (일회성 구매 또는 정기결제)

  • 사용자에게 구입할 수 있는 항목을 보여줌
  • 사용자가 구매를 수락할 수 있도록 구매흐름 시작 
  • 서버에서 구매 인증
  • 사용자에게 콘텐츠를 제공하고 콘텐츠 전송 확인(선택적으로 사용자가 항목을 다시 구입할 수 있도록 항목을 소비됨으로 표시)

정기결제 상태

  • 활성 : 사용자가 콘텐츠 사용에 문제가 없는 양호한 상태, 정기 결제 액세스 가능
  • 취소됨 : 사용자가 정기결제를 취소했지만 만료전까지 액세스 가능
  • 유예 기간 중 : 사용자에게 결제 문제가 발생했지만 Google에서 결제 수단을 다시 시도하는 동안 사용자가 계속 액세스할 수 있음
  • 보류 중 : 사용자에게 결제 문제가 발생하여 Google에서 결제 수단을 다시 시도하는 동안 사용자가 더 이상 액세스할 수 없음 일시 중지됨 사용자가 액세스를 일시 중지했으며 다시 시작할 때까지 액세스할 수 없음
  • 만료됨 : 사용자가 정기 결제를 취소했으며 정기 결제 액세스 권한을 잃음. 만료 시 사용자가 이탈한 것으로 간주

구매 토큰 및 주문 ID

  • Google Play에서는 구매토큰과 주문 ID를 사용하여 제품 및 거래를 추적
  • 사용자는 주문 ID 또는 거래의 고유 ID가 포함된 거래 영수증을 이메일로 받음, 
  • 일회성 제품 구매시, 최초 정기 결제 구매 및 이후의 반복적인 자동갱신시에도 고유 주문 ID가 포함된 이메일을 받음
  • 구매토큰
    • Google Play에서 제품에 대한 구매자의 자격을 나타내는 문자열
    • Google 사용자가 SKU로 표시되는 특정 제품과 관련하여 자격이 있음을 나타냄
    • Google Play Developer API와 함께 사용할 수 있음. 
    • 사용자가 구매 흐름을 완료할 때만 생성됨
    • 일회성 제품의 경우 모든 구매시 새 토큰이 생성됨
  • 주문ID
    • Google Play에서 금융 거래를 나타내는 문자열, 구매자에게 이메일로 전송되는 영수증
    • 판매 및 판매 대금 보고서에도 사용됨. 주문 ID를 사용하여 환불을 관리할 수 있음
    • 금융 거래가 발생할 때마다 생성됨
    • 대부분의 구매시 새 주문 ID 생성됨(프로모션 코드에 설명된 대로 사용자에게 비용이 청구되지 않는 경우 예외)
  • 정기결제
    • 최초 구매 시 구매 토큰 및 주문 ID 생성
    • 이후 계속되는 각 결제 기간에 구매토큰은 동일하게 유지되며 새로운 주문 ID가 발급
    • 업그레이드, 다운그레이드, 대체 및 재가입은 모두 새로운 구매 토큰 및 주문 ID를 생성
    • 정기 결제 업그레이드, 다운그레이드 및 기타 정기 결제 구매 흐름은 이전 구매 토큰을 대체해야하는 구매토큰을 생성, Google Play Developer API의 linkedPurchaseToken필드에 표시되는 구매 토큰을 무효화해야 함
    • 정기 결제 갱신 주문 번호에는 특정 갱신 인스턴스를 나타내는 정수가 추가로 포함. (ex, 최초 정기 결제 주문 ID : GPA.1234-5678.9012-34567, 두번째 갱신 : GPA.1234-5678-9012-34567..1 등)

정기 결제 수명 주기 처리

  • 정기 결제는 전체 수명주기 동안 다양한 상태 변경을 거칠 수 있으며 앱은 각 변경에 응답해야 함
BillingClient.queryPurchases() Purchases.subscriptions:get
상태 반환됩니까? isAutoRenewing 반환됩니까? expiryTimeMillis paymentState autoRenewing
활성 향후 일정 1(결제 수신)
취소됨 거짓 향후 일정 1(결제 수신) 거짓
유예 기간 중 향후 일정 0(결제 대기 중)
보류 중 아니요 N/A 과거 0(결제 대기 중)
일시중지됨 아니요 N/A 과거 1(결제 수신)
만료됨 아니요 N/A 과거 1(결제 수신) 거짓