- 구독형 상품에는 만료일이 존재한다.- 우리가 넷플릭스 같은 구독형 서비스를 첫 결제한 일자 + 1달 / 1년 정도가 보통 이번 구독 만료일이다. - 그리고 사용자가 만일 구독을 중단하고 싶으면 플레이 스토어에서 정기 결제 취소를 진행하는데, 이때 서비스에서는 사용자가 이탈하지 않도록 재구독을 권하는 로직을 구성할 수도 있다. - 이때 인앱 결제 영수증으로부터 ExpiredTime 데이터를 가져와서 처리함 - 그래서 재구독 버튼을 만들던 무언가 UIUX를 구성하는데, 이 재구독 기능은 특별히 구글 인앱 결제 모듈에 따로 구분이 되어있지는 않다. - 단순히 사용자가 이용하던 구독 상품 ID를 찾고, 해당 상품의 결제 로직을 다시 호출하면 된다.fun checkUnConfirmedPurchases( ..
- 자사 구글 인앱 결제 모듈을 작년 초인가에 리팩토링 했던 기억이 난다. - 특별한 문제없이 정상 서비스되고 있었는데, 저번주 앱 심사에서 갑자기 거절당했다. 이유를 살펴보니 가격이 명시되어야 하는 UI에 Free라고 기입되어 실제 구글 결제 UI에서 나오는 가격과 다르다는 이야기였다; - 상단 이미지가 인앱 Text인데, 똑같은 수량의 달러 표시가 아니다. - Free 부분을 원래 인앱 결제 모듈에서 제공하는 ProductDetails를 통해 자사에서 지정한 가격을 실제 각 국가별 통화, 환율에 맞게 내려주는 것인데 재현은 안되지만 정황을 봤을 때 그 값이 Free라는 String으로 내려오는 것으로 보인다. (또는 0 이거나) - 따라서 가격을 찾는 코드를 아래와 같이 수정했다.val value =..
- 기존 프로젝트 내에 인앱 결제 관련 로직이 너무 노후화되어 있었고, 함수도 분산되어 있어서 관리하기가 난해했다. - 최근에 모듈을 최신화하면서 주요 함수를 BillingManager라는 싱글톤 object로 정리했는데, 그 내용을 기록해 본다.결제 모듈 초기화object BillingManager { private var billingClient: BillingClient? = null /** * 결제 모듈 초기화 완료 여부 */ fun isReady(): Boolean { val client = this.billingClient ?: return false return client.isReady }- 결제 모듈 초기화 완료 여부를 확인하는..