반응형
- 구독형 상품에는 만료일이 존재한다.
- 우리가 넷플릭스 같은 구독형 서비스를 첫 결제한 일자 + 1달 / 1년 정도가 보통 이번 구독 만료일이다.
- 그리고 사용자가 만일 구독을 중단하고 싶으면 플레이 스토어에서 정기 결제 취소를 진행하는데, 이때 서비스에서는 사용자가 이탈하지 않도록 재구독을 권하는 로직을 구성할 수도 있다.
- 이때 인앱 결제 영수증으로부터 ExpiredTime 데이터를 가져와서 처리함
- 그래서 재구독 버튼을 만들던 무언가 UIUX를 구성하는데, 이 재구독 기능은 특별히 구글 인앱 결제 모듈에 따로 구분이 되어있지는 않다.
- 단순히 사용자가 이용하던 구독 상품 ID를 찾고, 해당 상품의 결제 로직을 다시 호출하면 된다.
fun checkUnConfirmedPurchases(
productType: String,
onResult: (BillingResult, List<Purchase>) -> Unit
) {
val params = QueryPurchasesParams.newBuilder().setProductType(productType)
billingClient?.queryPurchasesAsync(params.build()) { billingResult, purchasesList ->
onResult(billingResult, purchasesList)
}
}
fun premiumReSubscribe(activity: Activity) {
var lastProductId: String
checkUnConfirmedPurchases(ProductType.SUBS) { billingResult, purchasesList ->
if (billingResult.responseCode != BillingClient.BillingResponseCode.OK || purchasesList.isEmpty()) return@checkUnConfirmedPurchases
//사용자가 구독을 취소한 상품을 찾아내는 부분
lastProductId = purchasesList.find { !it.isAutoRenewing }?.products?.first() ?: return@checkUnConfirmedPurchases
mainAsync {
getPurchaseListDetails(arrayListOf('자사 서비스 상품 ID 목록'), ProductType.SUBS) { products ->
if (products.isEmpty()) return@getPurchaseListDetails
val product = products.find { it.productId == lastProductId } ?: return@getPurchaseListDetails
startPurchase(product, activity)
}
}
}
}
- AutoRenewing을 기준으로 정기 결제 취소된 상품을 골라낼 수 있다.
- 이후에 재구독 버튼을 클릭하면 구글 결제 창이 나타나는데, 기존의 만료일자까지는 추가 결제가 없는 것을 확인할 수 있다.
반응형