Я пытался оформить подписку Gpay на покупку в приложении, и я получаю сообщение об ошибке со SKuDetails, и значение списка равно нулю.
Ниже приведен мой код инициализации Gpay.
private void payWithGPay(){
mBillingClient = BillingClient.newBuilder(SubscriptionsActivity.this).setListener(this).enablePendingPurchases().build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK)
{
List<String> skuList = new ArrayList<>();
skuList.add(GPAY_PRO_MONTHLY);
skuList.add(GPAY_PRO_MONTHLY);
SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder()
.setSkusList(skuList).setType(BillingClient.SkuType.INAPP).build();
mBillingClient.querySkuDetailsAsync(skuDetailsParams, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(list.get(0))
.build();
if (mBillingClient.launchBillingFlow(SubscriptionsActivity.this, flowParams).getResponseCode() == BillingClient.BillingResponseCode.OK) {
// do something you want
}
}
});
}
}
@Override
public void onBillingServiceDisconnected() {
}
});
skuList = new ArrayList();
skuList.add(GPAY_PRO_MONTHLY);
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& list != null) {
for (Object skuDetailsObject : list) {
SkuDetails skuDetails = (SkuDetails) skuDetailsObject;
String sku = skuDetails.getSku();
String price = skuDetails.getPrice();
if (GPAY_PRO_MONTHLY.equals(sku)) {
mAdRemovalPrice = price;
}
}
}
}
});
}
Я также реализовал класс с помощью PurchaseasesUpdatedListener и переопределил onPurchasesUpdated. Также значение переменной GPAY_PRO_MONTHLY не является нулевым.
Я просто получаю исключение IndexOutOfBoundsException в .setSkuDetails (list.get (0)), поэтому список не имеет никакого значения.