API27 에뮬레이터에서 결제 안되는 현상
이번에 구글 결제 시스템을 구현하고 에뮬레이터를 통해서 버전별로 테스트하는 과정에서 예상치 못한 에러를 맞닥뜨리게 되었습니다.
-
테스트 중 api27에서만 결제 안되는 문제 발생(api26, 28 등 근접 api는 물론 다른 api에서는 결제 성공)
-
결제 api 를 통해 결제 정보를 출력
api 27
[Purchase. Json: {"orderId":"GPA.3326-2672-6218-50390",
"packageName":"com.platfarm.example.mojitoksdksampleapp",
"productId":"stickerpack","purchaseTime":1611227704347,
"purchaseState":0,
"purchaseToken":"kdignomoppbcajogjdlgpdgd.AO-J1OwHFawJBBidb7Pa2lwxsO-7YE8Ow8yKSQqvwdSMKeYJ3Cm4PmUO1u844lqN6s1upkch8RBjM27J_tSD8BeEzuYexsJ3Nagm5WYRXxmzHd8jyE1b68a1n9YEinMJWBXcNJyos-CE"}]
api 30
Purchase. Json: {"orderId":"GPA.3317-4708-7833-15839",
"packageName":"com.platfarm.example.mojitoksdksampleapp",
"productId":"stickerpack",
"purchaseTime":1611227972750,
"purchaseState":0,
"purchaseToken":"pbdjliglogfffffeladjappc.AO-J1OyXOLhBpTaizVe_TNrtUW9-nlvvAOCLaj241el54hp4XWM23JiUi9kXsmL8R45SjJpBtismGVcL_RqQyAa2zD3-IYJjWPuagtNtBYQ5_vB6rdQ26lVGrCEvzih2_qORCtCUgP0I",
"acknowledged":false}]
빌링 시스템의 반환값에서 차이가 있었습니다.
api27의 api response 값에는 acknowledged가 없었습니다. (비소비성 상품의 결제 유무를 나타내는 property)
다음은 각각의 api에서 플레이스토어를 실행시켰을 때의 스크린샷입니다.
에뮬레이터의 api27에서는 한단계 낮은 플레이스토어 버전을 제공하고 있습니다;;; 이유는 모르겠네요 ㅜㅜ api 27
에뮬레이터의 api27에서는 한단계 낮은 플레이스토어 버전을 제공하고 있습니다;;; 이유는 모르겠네요 ㅜㅜ 플레이스토어 버전에 따라 지원되는 라이브러리의 버전도 달라져서 발생하는 문제였네요...
-
해결법
-
Emulator 단의 해결법 - PlayStore 업데이트
위 처럼 에뮬레이터의 오류는 다음과 같이 해결할 수 있습니다. 하지만 코드상에서 에러를 잡을 수 있었다면 더 좋았을겁니다.
-
코드 상 처리
- 사실 실 기기에서는 플레이스토어 버전이 낮은 경우 자동적으로 업데이트를 안내하기는 합니다만, 모든 상황을 고려하는 것이 좋겠죠!
-
실기기에서는 낮은 버전의 PlayStore 사용할 때 결제 시도시 자동적으로 업데이트를 안내하는 것으로 알고 있으나 코드상으로도 다음 사항에 대해 예외처리도 필요합니다.
- 구글 결제 서비스를 구현하면서 다음 상황에 예외처리도 작성해주도록 합시다.
- BILLING_UNAVAILABLE