Как загрузить один продукт из объекта skuDetails? - PullRequest
0 голосов
/ 03 июля 2019

Как 'setProductId' в Google Play Billing Library 2.0.x был удален, и мы должны использовать setSkuDetails для запускаBillingFlow. Итак, как запустить BillingFlow для совершения покупки товара

• У меня есть 3 вещи, которые являются RadioButtons

• Пользователь должен выбрать один товар и оплатить, нажав кнопку

Я сделал следующее из документации, чтобы получить цену

final   List<String> skuList = new ArrayList<>();

    skuList.add("item1");
    skuList.add("item2");
    skuList.add("item3");
    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> skuDetailsList) {
                    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
                        for (SkuDetails skuDetails : skuDetailsList) {


                            String sku = skuDetails.getSku();
                            String price = skuDetails.getPrice();
                            if ("item1".equals(sku)) {
                                item1price = price;
                            } else if ("item2".equals(sku)) {
                                item2price = price;


                            } else if ("item3".equals(sku)) {
                                item3price = price;
                        }
                    }
                }

            });

Как купить один товар по нажатию кнопки после того, как пользователь выбирает товар?

mBuyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                    .setSkuDetails(skuDetails)
                    .build();
        }
    });

1 Ответ

0 голосов
/ 12 июля 2019

попробуйте это инициировать

private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();

и добавьте

mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);

в свой код:

final   List<String> skuList = new ArrayList<>();

skuList.add("item1");
skuList.add("item2");
skuList.add("item3");
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> skuDetailsList) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
                    for (SkuDetails skuDetails : skuDetailsList) {


                        String sku = skuDetails.getSku();
                        String price = skuDetails.getPrice();

                        mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);

                        if ("item1".equals(sku)) {
                            item1price = price;
                        } else if ("item2".equals(sku)) {
                            item2price = price;


                        } else if ("item3".equals(sku)) {
                            item3price = price;
                    }
                }
            }

        });

для item1 это будет

  mBuyButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(mSkuDetailsMap.get("item1")
                .build();
    }
});

Дайте мне знать, если это сработает.

...