01. 원스토어 인앱결제 개요

원스토어 인앱결제란?

원스토어 인앱결제(In-App Purchase, IAP)는 안드로이드 앱 내에 구현된 상품을 원스토어의 인증 및 결제 시스템을 이용하여 사용자에게 판매, 청구하여 개발자에게 정산하는 서비스입니다.

인앱 상품 결제를 위해 원스토어 서비스(ONE store service, OSS) 앱과 연동이 필요하며, 원스토어 서비스 앱은 원스토어 결제 서버와 연동하여 인앱상품의 결제를 수행합니다.

원스토어 인앱결제를 적용하기 위해서는 '원스토어 IAP SDK(In-App Purchase Software Development Kit)'를 적용하면 됩니다.

인앱 상품의 유형

원스토어 인앱결제 API V7(SDK V21)는 관리형 상품과 구독형 상품. 두 가지 유형의 인앱 상품을 제공 합니다. 우선, 각 타입이 어떤 특성을 가지고 있는지 확인하신 후 본인이 제공하는 상품에 맞게 인앱 상품 목록을 구성해 보시기 바랍니다.

구분내용

관리형 상품

구매 후 소비(consume)하기 전까지 재구매가 되지 않는 상품입니다. 해당 상품을 다시 구매하기 위해서는 소비(consume) 처리를 해야 합니다. 해당 특성을 이용하여 소비성/영구성/기간제 형태의 인앱 상품을 제공 할 수 있습니다.

월정액 상품 (Deprecated)

한 번 가입하면 지정된 날짜에 매월 일정 금액이 자동결제 되는 상품으로, 자동결제 갱신(재결제)은 원스토어에서 처리합니다.

SDK V21 (API V7) 적용 이후 신규 월정액 상품은 만들 수 없습니다. (기존에 만들어진 월정액 상품은 계속 이용 하실 수 있습니다.)

구독형 상품을 이용하여 정기 결제 상품을 제공할 수 있습니다,

구독형 상품

SDK V21 (API V7) 부터 제공되는 정기 결제 상품 타입입니다.

정해진 주기에 따라 원스토어에서 정기 결제를 처리하며, 신규 고객을 유치하기 위한 프로모션 기능 및 결제 수단 변경 등의 사용자 편의 기능을 제공합니다.

구독형 상품에 대한 자세한 내용은 정기결제 적용하기 페이지를 참고하시기 바랍니다.

결제 프로세스

원스토어 인앱결제는 크게 다음의 네 가지 프로세스로 구성되어 있습니다.

원스토어 로그인 하기

GaaSignInClient 초기화

GaaSignInClient는 원스토어 로그인을 하기 위한 라이브러리입니다.

getClient() 통해 인스턴스를 생성합니다.


  val signInClient = GaaSignInClient.getClient(activity)
 

포그라운드 로그인하기

slientSignIn()과 달리 해당 함수는 UiThread 에서만 호출해야 합니다.

기본적으로 먼저 백그라운드 로그인을 시도하지만 실패에 대한 처리를 SDK에서 전담하여 처리합니다. 이 후, 로그인 화면을 띄워 사용자에게 로그인을 유도합니다.


  signInClient.launchSignInFlow(activity) { signInResult ->
  
  }
 

백그라운드 로그인하기

slientSignIn() 통해 백그라운도 로그인을 호출합니다.

사용자가 이미 원스토어 계정에 로그인 되어있을 경우 이후 부터는 백그라운드에서 토큰로그인을 시도합니다. 성공 또는 실패에 대한 결과값으로 SignInResult 객체로 응답을 받습니다.


  signInClient.silentSignIn { signInResult ->
  
  }
 

인앱 상품 구매 요청하기

상품을 구매하려면 먼저 상품 상세정보(queryProductDetailAsync) API 호출하여 상품의 정보을 가지고 launchPurchaseFlow API를 통해 구매 화면을 호출합니다.

결제가 완료되면 PurchaseClient 객체를 초기화할 때 입력한 PurchasesUpdatedListener를 통해 구매정보를 전달받을 수 있습니다.

결과 코드값을 검증한 후에 성공으로 확인되면 인앱 상품에 해당하는 아이템을 지급하는 프로세스를 진행합니다.

아래 그림은 개발사 앱과 원스토어 사이의 인앱 상품을 구매하는 프로세스를 나타낸 것입니다.

구매 확인하기

원스토어 IAP 라이브러리 V6 이상을 사용하는 경우 3일 이내에 구매 확인을 진행해야 합니다. 구매 확인이 되지 않으면, 고객에게 구매 금액이 환불됩니다.

다음 두 가지 방법을 사용하면 구매를 확인할 수 있습니다.

  • 소비하기 (consume)

    • 관리형 상품의 특징은 구매 후 소비(consume) 하기 전까지 재구매가 되지 않는 것입니다. 따라서, 관리형 상품 중 반복 구매가 가능한 소비성 상품을 제공할 경우에는 반드시 PurchaseClient.consumeAsync()를 사용하여 소비 처리를 해야 고객이 해당 상품을 다시 구매할 수 있습니다.

    • 소비성 형태의 상품을 구현할 때는 구매 프로세스 완료 후 바로 구매한 상품을 소비시키고, 소비가 완료된 후에 아이템을 지급합니다.

    • 사용자가 앱(게임)을 실행하는 시점 또는 앱(게임)에 로그인하는 시점에 위의 API들을 호출하여, 미지급된 상품이 있는지 사전에 체크하고 상품을 지급하는 프로세스를 추가하는 것을 권장합니다.

  • 구매 확인하기 (acknowledge)

    • 소비성 상품이 아닌 경우, PurchaseClient.acknowledgeAsync() 를 사용합니다. 소비 처리를 하지않고, 구매 인증만 하는 방법으로 영구성 상품을 구현할 수 있습니다.

    • 영구성 형태의 상품을 구현할 때는, 소비가 아닌 구매 확인 (acknowledge)을 해야 합니다.

네트워크 단절이나 앱의 갑작스러운 비정상 종료 등으로 인해, 고객은 결제를 완료하였으나 개발사에 결제정보 전달이 누락되어 인앱 상품이 지급되지 않는 경우가 발생할 수 있습니다. 구매정보 가져오기(queryPurchases) 및 소비(consume) 기능을 활용하여 구매가 완료 되었으나 미지급된 내역이 있는지 확인 후 미지급된 상품이 지급 처리될 수 있도록 프로세스를 구현하는 것을 권장합니다.

구독형 상품 관리

구독형 상품(subscription)은 첫 구매 이후 상품 결제 주기에 따라 정기적으로 결제를 갱신합니다.

원스토어는 사용자가 정기 결제 상품을 관리 할 수 있도록 일시 중지, 구독 해지, 결제 수단 변경 등 다양한 기능이 있는 정기 결제 관리 화면을 제공합니다.

launchManageSubscription API를 호출하거나 딥링크를 사용하여 정기 결제 관리 메뉴를 제공 할 수 있습니다.

권장 개발 환경

원스토어 IAP SDK를 적용하기 위해 다음과 같은 개발 환경이 필요합니다.

Last updated