@Wolfak

Как реализовать получение результата Android In-app billing в fragment?

Здравствуйте. Не могу разобраться уже несколько дней. Как реализовать получение результата Android In-app billing в fragment? При совершении тестовой оплаты (после успешной оплаты покупки) ничего не происходит с первого раза, при клике второй раз (и последующие) на кнопку купить успешно выполняется действие из метода onProductPurchased. Почему действие после успешной покупки не выполняется с первого раза и как это решить? Все операции с биллингом происходят внутри фрагмента. Перечитал кучу информации в интернете и подобные вопросы, но не понял как решить эту проблему. Надеюсь на вашу помощь.

Мой код:
// Инициализация и кнопка в 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);
        }
    }
  • Вопрос задан
  • 168 просмотров
Решения вопроса 1
@Wolfak Автор вопроса
Проблема решена. Я уже пытался решить ее таким способом, но вставлял данный код не туда. Необходимо чтобы и в основном Activity был метод onActivityResult, который передавал данные в onActivityResult фрагмента. Код onActivityResult из основного Activity:
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        for (Fragment fragment : getSupportFragmentManager().getFragments())
        {
            if (fragment != null)
            {
                fragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы