이번 포스팅을 해볼것은 안드로이드 앱내에 인앱결제 관련해서 이론적으로 정리해보겠다.
※ 본 포스팅의 참고 문서는 최신 문서가 아닌 예전 문서를 바탕으로 작성 된 것이므로 잘못된 내용이 있으면 댓글 부탁드립니다 :)
# 인앱결제의 종류
## 1. 일회성 제품
- 일회성 제품은 사용자가 결제 방법으로 반복되지 않는 단일 요금을 지급함으로써 구매할 수 있는 컨텐츠. Google Play 결제 라이브러리에서는 정기 결제를 "INAPP"이라고 칭한다.
일회성 제품은 아래 두가지 종류로 나뉜다.
👉 소비성 제품 : 소비성 제품은 사용자가 게임 내 컨텐츠를 받기 위해 소비하는 제품. ex) 게임 머니
👉 비소비성 제품 : 비소비성 제품은 한 번 구매하면 영구적인 혜택을 제공하는 제품 ex) 프리미엄 업그레이드
## 2. 정기 결제
- 정기 결제는 반복적으로 컨텐츠에 대한 엑세스를 제공하는 제품. Google Play 결제 라이브러리에서는 정기 결제를 "SUBS"라고 칭함
👉 정기 결제는 취소될 때까지 자동으로 갱신
👉 무료 체험판을 제공
👉 신규 할인 가격 제공
👉 결제 실패 시 유예기간을 제공
👉 사용자가 정기 결제를 취소하는 대신 일시 중지 기능 제공
## 3. 프로모션
- 프로모션 또는 프로모션 코드를 사용하면 한정된 수의 사용자에게 무료로 일회성 제품이나 정기 결제 무료 체험판을 제공할 수 있음. 유저는 Google Play 스토어 앱에서 프로모션 코드를 입력하여 체험판을 사용할 수 있음.
# 개발 방식
- 인앱 결제의 개발 방식이 여러가지 있는데 여기서는 두가지를 설명해보겠다.
## 로컬 검증 방식
👉 안드로이드 Billing 라이브러리로만 구매 처리를 하는 방식 (플레이스토어 앱에서 구매 데이터를 캐싱 처리 하는 것으로 추측)
👉 구글 서버에 검증 처리를 거치지 않고 로컬에서만 처리를 하기 때문에 보안이 취약함.
## 영수증 검증 방식 (Recommend)
👉 인앱을 구매하면 purchaseToken이 발행되는데 이 값을 api 서버에 넘기고 google 영수증 api를 호출하여 검증하는 방식.
👉 구글 서버에 직접 질의하는 방식이므로 유저가 거짓으로 구매한건지 확인할 수 있음
👉 google 영수증 api 제한 존재
👉 구독 취소, 환불과 같은 이벤트들에 유기적으로 대응할 수 없음

