W
W
wolfak2018-08-17 16:56:34
Java
wolfak, 2018-08-17 16:56:34

How to implement getting Android In-app billing result in fragment?

Hello. I can't figure it out for a few days now. How to implement getting Android In-app billing result in fragment? When making a test payment (after a successful payment for the purchase), nothing happens the first time, when you click the second time (and subsequent) on the buy button, the action from the onProductPurchased method is successfully performed. Why is the action after a successful purchase not performed the first time and how to solve it? All billing operations occur inside a fragment. I read a bunch of information on the Internet and similar questions, but did not understand how to solve this problem. I hope for your help.
My code:

// Инициализация и кнопка в onCreateView
bp = new BillingProcessor(context, "Мой ключ", this);
bp.initialize();

// Клик по кнопке для оплаты
PayButt.setOnClickListener(
                                    new View.OnClickListener() {
                                        public void onClick(View v) {

                                                // Выполняем оплату
                                                bp.purchase((Activity) context, ProductID);

                                        }
                                    }
                            );
// Инициализация и кнопка в onCreateView

// Стандартные методы

    // Оплата
    @Override
    public void onBillingInitialized() {
        /*
         * Вызывается, когда объект инициализирован и можно совершать покупки
         */
    }

    @Override
    public void onProductPurchased(@NonNull String productId, TransactionDetails details) {

        /*
         * Вызывается когда покупка совершена
         */

        if (bp.isPurchased(productId)) {

           Toast toastTrue = Toast.makeText(context, "Оплата выполнена успешно!", Toast.LENGTH_SHORT);
                        toastTrue.show();

                        // Переходим на главную
                        Intent intent = new Intent(getActivity(), MainController.class);
                        startActivity(intent);

        }

    }

    @Override
    public void onBillingError(int errorCode, Throwable error) {
        /*
         * Вызывается при возникновении каких-либо ошибок при совершении покупки
         */
    }

    @Override
    public void onPurchaseHistoryRestored() {
        /*
         * Вызывается один раз при первом запуске после установки или переустановки приложения.
         * Служит для получения приобретённых ранее покупок, например, на другом устройстве
         */
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (!bp.handleActivityResult(requestCode, resultCode, data)) {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question