Возникли проблемы с реализацией биллинга в приложении, особенно с тестированием запуска Billing Flow.
- Успешно подключается к службе выставления счетов.
- Это работало ранее, но только в первый раз, затем мне пришлось вручную удалить покупку из управления заказами.
- Я также заметил, что onPurchasesUpdated не вызывается.
- Выполнение внутреннего теста на обновленном и совместимом устройстве.
Запрос сведений о продукте
public void queryProducts() {
List<String> skuList = new ArrayList<>();
skuList.add(COINS_5);
skuList.add(COINS_15);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
for (SkuDetails skuDetails : skuDetailsList) {
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
flowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build();
if ("coins_5".equals(sku)) {
coins5Price = price;
} else if ("coins_15".equals(sku)) {
coins15Price = price;
}
}
}
}
});
}
onPurchasedUpdated
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
}
else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
}
else {
}
}
Подтверждение покупки (не думайте, что это влияет на запуск потока выставления счетов)
public void handlePurchase(Purchase purchase) {
Toast.makeText(CoinsActivity.this, "Handle purchase" , Toast.LENGTH_LONG).show();
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
// Grant entitlement to the user.
// Acknowledge the purchase if it hasn't already been acknowledged.
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
}
}
Буду признателен за любые советы, так как я застрял на этом некоторое время.