Android Billing SDK 라이브러리(2.2.0) 기준 내용입니다.
회사에서 기존에 쓰고 있던 AIDL 라이브러리를 교체할 겸 그리고 잘못 구현된 결제 로직을 다시 바로 잡기 위해 작업한 내용을 정리하고자 한다.
1. BillingClient 생성 및 연결 시도
- Application Context가 필요하기 때문에 Application 단에서 한 번 생성해 줌
- Client가 생성되면 Connect를 시킴
2. 상품 목록 조회
- 결제를 하려면 SkuDetails 객체가 필요하기 때문에 상품 목록 조회 과정은 꼭 필요함(앱 서버와는 관계없이 무조건)
- 이 과정에서 결제할 상품에 대한 정보를 얻음
3. 상품 결제 요청
- 2번 과정에서 얻은 SkuDetail 객체로 결제 요청을 함
4. 결제 결과 수신
- 성공 : 앱 서버에 상품을 지급하도록 요청함
- 취소 : 취소되었음을 사용자에게 알림
5. 앱 서버에 상품 지급 요청
- 성공 : InApp 상품인 경우 consumeAsync를 통해 구매토큰을 소모하고 구독 상품인 경우 acknowledgePurchase를 통해 구매토큰을 소모할 것
- 실패 : 재시도 로직을 통해 앱 서버에 다시 상품 지급 요청
참고 : 재시도 로직(미지급건)을 위해서 구매내역을 가져오는 API를 호출하는 건 비추인 것 같다. 결제, 구매토큰 처리는 비동기로 하는 부분이기 때문에 언제 완료될지 장담할 수가 없다. 따라서 안에서 큐 같은 형태로 미지급 건을 관리하는 것이 좋을 것 같다.
2020.11.10 수정
6. 구매 복원 로직
- 해당 결제에 대한 상품이 미지급이 일어난 경우에 동작(Activity의 onResume에서 동작하는 것을 권장), 하지만 onResume이더라도 구매 복원 로직을 안 수행하고 있을 때만 하는 것이 나아보임.
- queryPurchases 메소드를 통해 미지급된 구매 내역을 가져옴
- 앱 서버에 상품 지급 요청(성공 시에만 지급되었음을 사용자에게 알림)
- 추가로 앱 최초 결제 창 띄울 때 중복으로 창이 뜨는 이슈가 있어서 해당 부분을 일단 클라이언트에서 막아야 됨
'Android > 기타' 카테고리의 다른 글
[Android] View가 NullPointerException을 내는 경우 (0) | 2020.05.20 |
---|---|
[Android] Retrofit2 재시도 로직 넣기 (0) | 2020.05.20 |
[Android] Retrofit2 중복 콜 문제 (0) | 2020.04.22 |
[Android] Firebase Crashlytics 연동하기 (0) | 2020.03.05 |
[Android] 인앱 결제가 안 될 때 체크해야 할 사항 (0) | 2020.03.03 |