- 구독형 상품에는 만료일이 존재한다.- 우리가 넷플릭스 같은 구독형 서비스를 첫 결제한 일자 + 1달 / 1년 정도가 보통 이번 구독 만료일이다. - 그리고 사용자가 만일 구독을 중단하고 싶으면 플레이 스토어에서 정기 결제 취소를 진행하는데, 이때 서비스에서는 사용자가 이탈하지 않도록 재구독을 권하는 로직을 구성할 수도 있다. - 이때 인앱 결제 영수증으로부터 ExpiredTime 데이터를 가져와서 처리함 - 그래서 재구독 버튼을 만들던 무언가 UIUX를 구성하는데, 이 재구독 기능은 특별히 구글 인앱 결제 모듈에 따로 구분이 되어있지는 않다. - 단순히 사용자가 이용하던 구독 상품 ID를 찾고, 해당 상품의 결제 로직을 다시 호출하면 된다.fun checkUnConfirmedPurchases( ..
- 자사 구글 인앱 결제 모듈을 작년 초인가에 리팩토링 했던 기억이 난다. - 특별한 문제없이 정상 서비스되고 있었는데, 저번주 앱 심사에서 갑자기 거절당했다. 이유를 살펴보니 가격이 명시되어야 하는 UI에 Free라고 기입되어 실제 구글 결제 UI에서 나오는 가격과 다르다는 이야기였다; - 상단 이미지가 인앱 Text인데, 똑같은 수량의 달러 표시가 아니다. - Free 부분을 원래 인앱 결제 모듈에서 제공하는 ProductDetails를 통해 자사에서 지정한 가격을 실제 각 국가별 통화, 환율에 맞게 내려주는 것인데 재현은 안되지만 정황을 봤을 때 그 값이 Free라는 String으로 내려오는 것으로 보인다. (또는 0 이거나) - 따라서 가격을 찾는 코드를 아래와 같이 수정했다.val value =..
중국에서는 구글 플레이 스토어가 지원되지 않는다. 중국에서 발매된 안드로이드 디바이스는 구글 플레이 스토어를 사용할 수 없습니다. 이유는 구글이 중국 정부의 검열 문제 때문에 아예 철수를 해버리게 되면서 모든 구글 서비스가 중단되었기 때문입니다. 하지만 바이두로 앱을 전파하는 경우도 있습니다. 이때, 구글 플레이 스토어가 지원되지 않을 경우, Billing 기능을 고려하여 구글 플레이 서비스 사용 가능 여부 확인이 필요한 경우가 있었습니다. 어떻게 해야 그 여부를 확인할 수 있는지 설명하겠습니다. GoogleApiAvailability GoogleApiAvailability 클래스는 Google Play 서비스의 가용성을 확인하고, 필요한 경우 사용자에게 오류를 해결하도록 안내하는 데 사용됩니다. 이 클..
구글 플레이 스토어에 앱을 업데이트하는 중 다음과 같은 경고가 표시되기 시작했다. 해당 경고가 가리키는 코드를 확인해 보니 압축 파일 처리에 대한 함수였다. fun unZip(zipFile: File, destFolder: File): List { val result = ArrayList() ZipFile(zipFile).use { zip -> zip.entries().asSequence().forEach { entry -> if (entry.isDirectory) { File(destFolder, entry.name).mkdirs() } else { zip.getInputStream(entry).use { input -> val file = File(destFolder, entry.name) file...