Здравствуйте. Не могу разобраться уже несколько дней. Как реализовать получение результата 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);
}
}