При использовании клиента Google Billing отображается та же информация о продукте - PullRequest
0 голосов
/ 16 февраля 2020

Я успешно внедрил Google Billing Client, но есть две вещи, которые не работают должным образом.

Мой фрагмент диалога отображает два управляемых продукта, но когда пользователь нажимает второй продукт, он получает данные о цене от первого продукта, хотя я добавил его в skuList. Из приведенного ниже кода видно, что в методе onSkuDetailsResponse я получаю цену каждого продукта и отображаю ее соответствующим образом в TextView, который работает нормально, только когда я нажимаю на кнопку пункта 1 или два, я всегда получить информацию о продукте 2 ("2_2000_coins")

Также внутри метода onConsumeResponse я хочу дать пользователю количество монет в зависимости от того, какой продукт он купил, как мне этого добиться?

Любая помощь очень ценится!

Вот мой код:

public class ShopDialog extends DialogFragment implements PurchasesUpdatedListener {

    private View btnItem1, btnItem2;
    private TextView tvItem1, tvItem2;
    private MainActivity main;
    private String uidPlayer1;

    private BillingClient billingClient;
    private SkuDetails skuDetailsVar;

    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference userRef = db.collection("User");
    private FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_shop, container, false);

        btnItem1 = view.findViewById(R.id.cv_shop_item_1);
        btnItem2 = view.findViewById(R.id.cv_shop_item_2);
        tvItem1 = view.findViewById(R.id.tv_shop_item_1);
        tvItem2 = view.findViewById(R.id.tv_shop_item_2);

        setupBillingClient();


        btnItem1.setOnClickListener(this::onClick);
        btnItem2.setOnClickListener(this::onClick);

        return view;
    }

    public void setupBillingClient() {

        // Establishes a connection to Google Play
        billingClient = BillingClient.newBuilder(getActivity()).setListener(this).enablePendingPurchases().build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    // The BillingClient is ready. You can query purchases here.

                    List<String> skuList = new ArrayList<>();
                    skuList.add("1_500_coins");
                    skuList.add("2_2000_coins");

                    SkuDetailsParams skuDetailsParams = SkuDetailsParams.newBuilder().setSkusList(skuList).setType(BillingClient.SkuType.INAPP).build();
                    billingClient.querySkuDetailsAsync(skuDetailsParams, new SkuDetailsResponseListener() {
                        @Override
                        public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {

                            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                                    && list != null) {
                                for (SkuDetails skuDetails : list) {
                                    skuDetailsVar = skuDetails;
                                    String sku = skuDetails.getSku();
                                    String price = skuDetails.getPrice();
                                    if ("1_500_coins".equals(sku)) {
                                        String premiumUpgradePrice = price;
                                        tvItem1.setText(premiumUpgradePrice);

                                    } else if ("2_2000_coins".equals(sku)) {
                                        String premiumUpgradePrice = price;
                                        tvItem2.setText(premiumUpgradePrice);
                                    }
                                }
                            }
                        }
                    });

                } else {
                    Toast.makeText(getActivity(), "Failed to connect", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onBillingServiceDisconnected() {

                Toast.makeText(getActivity(), "You are disconnected from the service", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                && purchases != null) {
            for (Purchase purchase : purchases) {

                ConsumeParams consumeParams =
                        ConsumeParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .setDeveloperPayload(purchase.getDeveloperPayload())
                                .build();

                ConsumeResponseListener listener = new ConsumeResponseListener() {
                    @Override
                    public void onConsumeResponse(BillingResult billingResult, String s) {
                        if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                            // Handle the success of the consume operation.
                            // Increase the number of coins inside the user's basket.

                            userRef.document(uidPlayer1).collection("Points").document("Guess Coins").update("guess_coins", FieldValue.increment(2000))
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {

                                        }
                                    });
                        }
                    }
                };

                billingClient.consumeAsync(consumeParams, listener);
            }
        } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
            // Handle an error caused by a user cancelling the purchase flow.
        } else {
            // Handle any other error codes.
        }
    }

    // Handles the click events of the buttons
    public void onClick(View v) {

        if (v == btnItem1) {

            BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                    .setSkuDetails(skuDetailsVar)
                    .build();
            billingClient.launchBillingFlow(getActivity(), billingFlowParams);

        } else if (v == btnItem2) {

            BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                    .setSkuDetails(skuDetailsVar)
                    .build();
            billingClient.launchBillingFlow(getActivity(), billingFlowParams);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...