개발한 안드로이드 애플리케이션에서 구글 인앱 결제 v3를 사용중이었다.
그런데 23년 10월 31일 부로 인앱 결제 v3 지원이 중단된다며 그 이상의 버전으로 업그레이드 하라는 요청이 왔다.
인앱 결제로 수익을 계속 올리기 위해 최신 버전인 구글 인앱 결제 v6로 버전을 올렸다.
v4와 v5가 있었지만, 버전 up 하는 김에 추후 업데이트 간격을 줄이기 위해 한번에 v6로 가기로 하였다.
Google Play 결제 라이브러리 버전 3에서 버전 6으로의 마이그레이션은 새로운 데이터 유형을 처리하고, 새로운 메서드를 사용하며, 결제 흐름을 더 간소화된 방식으로 관리하는 등 여러 가지 변화를 포함하고있다.
다음은 마이그레이션을 도와줄 단계별 예제이다.
v3와 v6간 달라지는 부분을 1대1로 매칭시켜 놓았다. 해당 부분들을 변경하고, 개별로 로직짠 부분은 변경이 필요한 경우 각자 적용을 해주면 되겠다.
1. Update your build.gradle
:
dependencies {
...
implementation 'com.android.billingclient:billing:6.0.0'
}
2. Initialize BillingClient:
Version 3:
billingClient = BillingClient.newBuilder(context)
.setListener(this)
.enablePendingPurchases() // Necessary to support pending transactions on devices with Play versions earlier than 2.0
.build();
Version 6:
billingClient = BillingClient.newBuilder(context)
.setListener(this)
.build();
Note: The method enablePendingPurchases()
is not required in version 6.
3. Start a connection:
Version 3:
billingClient.startConnection(new BillingClientStateListener() {
...
});
Version 6:
billingClient.startConnection(new BillingClientStateListenerV6() {
...
});
4. Handle Purchases:
Version 3:
List<Purchase> purchases = billingResult.getPurchasesList();
if (purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
}
Version 6:
List<PurchaseDetails> purchases = billingResult.getPurchaseDetailsList();
if (purchases != null) {
for (PurchaseDetails purchase : purchases) {
handlePurchase(purchase);
}
}
Note: In version 6, Purchase
has been renamed to PurchaseDetails
.
5. Querying for Purchases:
Version 3:
Purchase.PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP);
Version 6:
PurchaseDetails.PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.INAPP);
6. Launching the Billing Flow:
Version 3:
billingClient.launchBillingFlow(activity, billingFlowParams);
Version 6:
billingClient.launchBillingFlow(activity, billingFlowParamsV6);
7. Acknowledging a Purchase:
Version 3:
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
Version 6:
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParamsV6 acknowledgePurchaseParams = AcknowledgePurchaseParamsV6.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
billingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
'프로그램 개발' 카테고리의 다른 글
SSD MobileNet V1 FPN 640x640 이름에서 FPN 의미 & 숫자 의미 (0) | 2023.11.06 |
---|---|
Image Detection 전형적인 과정 (0) | 2023.11.02 |
애드몹 정책 위반 내용 확인, 해결, 검토요청 하기 (0) | 2021.10.03 |
GitHub 프로젝트 비공개(Private)로 전환/설정 하기 (0) | 2021.07.24 |
안드로이드 개발환경 설정 - ADB path 설정 (환경변수 설정) (0) | 2021.07.18 |
댓글