Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 : 구글 인앱 결제 오류 대처

Billcorea 2022. 2. 2. 23:19
반응형

https://developer.android.com/google/play/billing/billing_reference?hl=ko 

 

Google Play 결제 AIDL 참조 문서  |  Google Play 결제 시스템  |  Android Developers

이 문서에서는 Google Play 결제 AIDL을 사용하기 위한 기술 참조 정보를 제공합니다.

developer.android.com

 

BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED (응답 코드 7)를 만나는 경우는 어떻게 할까?

    fun getAllPurchasedItem() {
        billingClient.queryPurchaseHistoryAsync(BillingClient.SkuType.INAPP, this)
    }

    // 최근 구매한 아이템을 알고자 할 때 사용
    // getAllPurchasedItem 의 this
    override fun onPurchaseHistoryResponse(
        billingResult: BillingResult,
        purchaseHistoryList: MutableList<PurchaseHistoryRecord>?
    ) {
        Log.e("onPurchaseHistoryResponse", "${billingResult.debugMessage}" )
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            if (!purchaseHistoryList.isNullOrEmpty()) {
                // 가장 최근에 구매된 아이템을 확인할 수 있다.
                purchaseHistoryList.forEach {
                    Log.e("onPurchaseHistoryResponse", "Previous Purchase Item : ${it.quantity}")
                    // 소비 되지 않은 것이 있다면 소비 처리 하기
                    var consumeParams = ConsumeParams.newBuilder()
                        .setPurchaseToken(it.purchaseToken)
                        .build()

                    billingClient.consumeAsync(
                        consumeParams,
                    ) { billingResult,_ ->
                        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
                            Log.e("onPurchaseHistoryResponse", "${billingResult.debugMessage}")
                            log(msg="${billingResult.debugMessage}")
                        }
                    }

                }
            }
        }
    }

쉬운 방법은 이전 구매 history을 열어 보는 방법이 있고, 그리고 이미 구해했던 이력을 만나게 되면 구매 이력을 이용해서 소비를 해 버리는 방법으로 해소를 하였다.  

 

구글링을 해서 찾아보다 보면 이런 상태가 되는 이유는 구매 처리를 진행하는 동안 네트워크가 끊어져서 처리가 정상적으로 되지 않았을 경우라고 하고 있기는 하지만, 나의 경우는 앱을 개발하는 동안 구매 처리를 했는 데, 소비 처리를 하지 않았더니, 계속 그런 현상이 발생하였다. 그래서 찾은 방법이 구매 이력을 찾아서 모두 다 소비시키는 방식으로 한번 처리를 하고 다시 구매 진행을 하였더니, 기존 구매 이력이 소비되는 것을 확인하였다. 

 
BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE (오류코드 4) 이런 경우는 앱 개발을 하는 경우 만나게 되는 것은 인앱 결제를 처리하기 위해서는 앱을 출시하기 전에 구매 테스트를 해야 하는 데, 구글 console에 테스트 계정을 등록하여 구매 테스트를 하게 되는 데,  AVD의 경우 설정에 들어가서 계정을 한 개만 설정했을 때는 문제가 없지만, 

 

실제 사용 중인 폰의 설정에서 계정을 2개 이상 등록한 경우에는 내 폰에 설정된 계정을 전부다 테스터 계정으로 등록하기 전에는 구매 테스트에서 이런 오류를 만나게 되는 경우가 있을 수 있다.

 

간간히 발생하는 오류 형태가 실제 개발 중에 테스트 시간을 뺏는 경우가 있을 수 있으므로 기억해 두고 있으면 도움이 될 것 같다. 

 

 

코드 샘플 이미지

 

반응형