14. Flutter 에서 원스토어 인앱결제 (SDK V21) 사용하기
Last updated
Last updated
원스토어 결제 플러그인은 플로터 환경에서 구현 된 어플리케이션에서 원스토어 결제 라이브러리의 최신 기능을 제공합니다. 이 가이드에서는 플러그인을 사용하는 방법과 원스토어 결제 라이브러리 기능을 구현하는 방법을 설명합니다.
'pub get' 을 클릭하여 패키지를 다운로드 하거나 명령줄에서 'flutter pub get' 을 실행합니다.
프로젝트의 build.gradle 에 maven 주소 추가하기
앱의 build.gradle 에 configuration 종속성 추가하기
Target SDK 버전이 30(OS 11) 이상으로 설정한 경우 아래의 <queries>를 추가해야 인앱 라이브러리가 정상 동작합니다.
원스토어 인앱 결제는 로그인 기반으로 구동되는 서비스입니다. 앱 최초 시작시 구매 라이브러리의 API 호출하기전에 로그인을 유도합니다. 구매 라이브러리 요청시 토큰 만료나 다른 여러가지 사항을 미연에 방지 할 수 있습니다.
이 객체는 앱이 시작될 때 직접 구매 업데이트를 들어야하므로 'lazy: false' 를 사용하여 이 객체에 대한 'Lazy loading' 을 비활성화 합니다.
원스토어 개발자 센터에 앱을 등록 하면 라이선스 키가 생성됩니다.
PurchaseClientManager.initialize() 호출 통해 최초 한 번 객체 셋업을 합니다.
'purchasesUpdatedStream' 스트림에 'listen'하여 구매 완료 응답을 받을 준비를 합니다. _listenToPurchasesUpdated 로는 구매 성공으로 구매 데이터를 응답 받습니다. _updateStreamOnError 로는 구매 실패에 대한 응답을 전달 받습니다.
앱 종료시에 'PurchaseClientManager.dispose()' 를 호출 하여 메모리 해지 및 연결을 해지하고 청취하고 있던 _purchaseUpdatedStream 도 dispose()하여 연결을 끊어야 합니다.
'await _clientManager.queryProductDetails(List<String>, ProductType)' 를 사용하여 원스토어 개발자센터에 등록된 인앱 상품의 상세 정보를 요청합니다.
'await _clientManager.launchPurchaseFlow(ProductDetail)' 사용하여 상품 구매를 요청합니다.
구매가 성공적으로 이루졌다면 '앱에서 구매 데이터 업데이트 및 오류 응답 청취하기'에서 등록한 '_listenToPurchasesUpdated' 통해 응답을 받을 수 있습니다. 물론 구매 실패에 대한 응답도 '_updateStreamOnError' 통해 받을 수 있습니다.
스토어에서 구매 완료 응답을 받았다면, 소비(consume) 또는 확인(acknowledge) 작업을 하는 것이 매우 중요합니다.
3일 이내에 구매를 확인(acknowledge) 또는 소비(consume)를 하지 않으면 사용자에게 상품이 지급되지 않았다고 판단되어 자동으로 환불됩니다.
'_clientManager.consumePurchase(PurchaseData)' 사용하여 관리형 상품의 소비를 요청합니다.
'_clientManager.acknowledgePurchase(PurchaseData)' 사용하여 관리형 상품 또는 구독 상품의 확인을 요청합니다.
관리형 상품(ProductType.inapp)의 경우 소비를 바로 하지 않으면 기간제 처럼 사용할 수 있습니다.
기간제 처럼: 구매 요청 → 응답 → acknowledgePurchase → 일정 기간이 지난 후 → consumePurchase
소모성 처럼: 구매 요청 → 응답 → consumePurchase
구독 상품(ProductType.subs)의 경우는 acknowledgePurchase만 사용할 수 있습니다.
'_clientManager.queryPurchases(ProductType)' 사용하여 소비되지 않은 구매 내역을 요청합니다.
'_clientManager.launchUpdateSubscription(ProductDetail, PurchaseData, ProrationMode)' 를 사용하여 구매한 정기결제 상품을 새로운 상품으로 변경 합니다. Upgrade or Downgrade 는 구매 요청 흐름과 동일하기 때문에 '구매 요청하기'와 응답 처리하는 방식이 같습니다. '_listenToPurchasesUpdated'로 응답을 받을 수 있습니다.
'_clientManager.launchManageSubscription(PurchaseData?)' 사용하여 구매한 구독 상품의 상세 페이지로 이동할 수 있습니다.
구독 상품의 설정 변경은 유저의 몫으로 관리 메뉴에서 할 수 있는 것들은 아래와 같습니다.
결제 수단 변경
구독 상태 변경 (해지 예약, 취소)
기 구독한 상품의 가격 변경 동의
PurchaseData를 null로 요청할 경우 특정 구독 상품의 상세페이지가 아닌 정기 결제 리스트 화면으로 이동합니다.
원스토어 서비스가 설치되지 않았거나 v21 SDK 에서 바라는 최소 버전이 아닐경우 RESULT_NEED_UPDATE 에러가 발생합니다. 해당 에러를 전달 받았을 경우 '_clientManager.launchUpdateOrInstall()' 사용하여 원스토어 서비스 설치를 요청합니다.
Request | ||
---|---|---|
Request | ||
---|---|---|