이 문서에서는 Google Play Billing Library (PBL) 7 또는 8에서 PBL 9로 이전하는 방법과 새로운 기능을 통합하는 방법을 설명합니다.
버전 9.0.0의 전체 변경사항 목록은 출시 노트를 참고하세요.
개요
PBL 9에는 기존 API 개선사항과 이전에 지원 중단된 API 삭제가 포함되어 있습니다. 이 버전의 라이브러리에서는 새로운 하위 응답 코드를 통해 더 풍부한 오류 컨텍스트도 도입합니다.
PBL 업그레이드의 하위 호환성
PBL 9로 이전하려면 출시 노트와 이 이전 가이드의 뒷부분에 설명된 대로 앱에서 기존 API 참조를 업데이트하거나 삭제해야 합니다.
PBL 7 또는 8에서 PBL 9로 업그레이드
PBL 7 또는 8에서 PBL 9로 업그레이드하려면 다음 단계를 따르세요.
앱의
build.gradle파일에서 Play Billing Library 종속 항목 버전을 업데이트합니다.dependencies { def billing_version = "9.0.0" implementation "com.android.billingclient:billing:$billing_version" }Kotlin을 사용한다면 Google Play 결제 라이브러리 KTX 모듈에 Kotlin 확장 프로그램과 코루틴 지원이 포함되어 있으므로 Google Play 결제 라이브러리를 사용할 때 직관적인 Kotlin을 작성할 수 있습니다. 프로젝트에서 이러한 확장을 포함하려면 다음과 같이 앱의
build.gradle파일에 다음 종속 항목을 추가합니다.dependencies { val billing_version = "9.0.0" implementation("com.android.billingclient:billing-ktx:$billing_version") }(PBL 7에서 PBL 9로 업그레이드하는 경우에만 적용)
queryProductDetailsAsync메서드의 구현을 업데이트합니다.ProductDetailsResponseListener.onProductDetailsResponse메서드의 서명이 변경되어queryProductDetailsAsync구현에서 앱을 변경해야 합니다. 자세한 내용은 구매 가능한 제품 표시를 참고하세요.삭제된 API를 처리합니다.
다음 표에는 삭제된 API와 앱에서 사용해야 하는 대체 API가 나와 있습니다.
다음에서 업그레이드
PBL 9에서는 다음 표에 나열된 API를 더 이상 지원하지 않습니다. 구현에서 삭제된 API를 사용하는 경우 표에서 해당 대체 API를 참고하세요.
이전에 지원 중단된 API 삭제 사용할 대체 API queryPurchaseHistoryAsync API 구매 내역 쿼리를 참고하세요. queryPurchaseHistoryAsync를 사용하여 무료 체험판 자격 요건을 확인한 경우 이제 ProductDetails.getSubscriptionOfferDetails()를 사용하여 사용자가 사용할 수 있는 혜택을 확인해야 합니다. BillingClient.SkuType BillingClient.ProductType. INAPP 및 SUBS 제품 유형 상수는 지원 중단된 SKU 유형 상수와 기능적으로 유사하게 유지됩니다. SkuDetails ProductDetails. 일회성 제품을 지원하는 새로운 데이터 모델입니다. SkuDetailsParams queryProductDetailsAsync와 함께 QueryProductDetailsParams를 사용합니다. SkuDetailsResponseListener queryProductDetailsAsync와 함께 ProductDetailsResponseListener를 사용합니다. QueryPurchaseHistoryParams - 활성 또는 대기 중인 구매에는 queryPurchasesAsync를 사용합니다.
- 백엔드 서버에서 사용된 구매를 추적합니다.
- 취소되거나 무효화된 구매에는 서버 측 무효화된 구매 API를 사용합니다.
getSkuDetailsList 및 setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList 사용 querySkuDetailsAsync queryProductDetailsAsync enablePendingPurchases() (매개변수가 없는 API) enablePendingPurchases(PendingPurchasesParams params)
지원 중단된 enablePendingPurchases()는 기능적으로enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())와 동일합니다.queryPurchasesAsync(String skuType, PurchasesResponseListener listener) queryPurchasesAsync 다음에서 업그레이드
다음 표에는 PBL 9에서 삭제된 API와 앱에서 사용해야 하는 해당 대체 API가 나와 있습니다.
이전에 지원 중단된 API 삭제 사용할 대체 API BillingClient.SkuType BillingClient.ProductType. INAPP 및 SUBS 제품 유형 상수는 지원 중단된 SKU 유형 상수와 기능적으로 유사하게 유지됩니다. SkuDetails ProductDetails. 일회성 제품을 지원하는 새로운 데이터 모델입니다. SkuDetailsParams queryProductDetailsAsync와 함께 QueryProductDetailsParams를 사용합니다. SkuDetailsResponseListener queryProductDetailsAsync와 함께 ProductDetailsResponseListener를 사용합니다. QueryPurchaseHistoryParams - 활성 또는 대기 중인 구매에는 queryProductDetailsAsync를 사용합니다.
- 백엔드 서버에서 사용된 구매를 추적합니다.
- 취소되거나 무효화된 구매에는 서버 측 무효화된 구매 API를 사용합니다.
getSkuDetailsList 및 setSkuDetailsList BillingFlowParams.Builder.setProductDetailsParamsList 사용 (권장) 자동 서비스 재연결을 사용 설정합니다.
서비스가 연결 해제된 상태에서 API 호출이 이루어지면 Play 결제 라이브러리는 서비스 연결을 자동으로 다시 설정하려고 시도할 수 있습니다. 자세한 내용은 자동 서비스 재연결 사용 설정을 참고하세요.
새 하위 응답 코드 처리
이제
launchBillingFlow()에서 반환된 BillingResult에 하위 응답 코드 필드가 포함됩니다. 이 필드는 실패에 대한 더 구체적인 이유를 제공하기 위해 일부 경우에만 채워집니다. 하위 응답 필드는 다음 값을 가질 수 있습니다.PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS- 사용자의 잔액이 구매하려는 상품의 가격보다 적은 경우 반환됩니다.USER_INELIGIBLE- 사용자가 정기 결제 혜택에 대해 구성된 자격 요건을 충족하지 않는 경우 반환됩니다.NO_APPLICABLE_SUB_RESPONSE_CODE- 다른 하위 응답 코드가 적용되지 않을 때 반환되는 기본값입니다.
이전 단계: 이러한 특정 하위 응답 코드를 인식하고 이에 응답하여 더 나은 사용자 환경을 제공하도록
PurchasesUpdatedListener또는 이에 상응하는 결과 처리를 업데이트합니다. 예를 들어 결제 수단을 수정하라는 메시지를 표시하거나 특정 오류 메시지를 표시합니다.오류 코드 재분류 인식
Play 스토어 앱이 시스템에 의해 차단되는 경우(예: OEM 맞춤설정 아동 모드) PBL의 응답 코드가
ERROR에서BILLING_UNAVAILABLE로 변경되었습니다.이전 단계: 오류 처리 로직이 이 변경사항을 수용하고 이러한 특정 시나리오에서 일반 오류를 수신하는 데 의존하지 않는지 확인합니다.
DeveloperProvidedBillingDetails.getLinkUri()null 허용 여부를 처리합니다.외부 결제 통합의 일부로
DeveloperProvidedBillingDetails를 사용하는 경우 이제getLinkUri()이(가)@Nullable입니다.이전 단계: 이 변경사항을 안전하게 처리하려면 브라우저 인텐트를 파싱하거나 실행하기 전에 통합 코드가
DeveloperProvidedBillingDetails.getLinkUri()메서드에서null값과 빈 문자열 ("") 값을 모두 처리하는지 확인하세요. 예를 들면 다음과 같습니다.Kotlin
val linkUri = details.getLinkUri() if (!linkUri.isNullOrEmpty()) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)) context.startActivity(intent) }자바
String linkUri = details.getLinkUri(); if (!android.text.TextUtils.isEmpty(linkUri)) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUri)); context.startActivity(intent); }선택적 변경사항입니다.
선불 요금제의 대기 중인 구매를 지원합니다. 자세한 내용은 정기 결제 및 대기 중인 거래 처리를 참고하세요.
가상 할부 구독 자세한 내용은 할부 구독 통합을 참고하세요.