khegay
@khegay
Founder, Garuna

Как завершить цикл покупки в ionic-native/in-app-purchase-2?

Документация In App Purchase 2

Суть:
Приложение на Ionic 4 / Cordova / Angular 8
Установлен In App Purchase 2, настроены аккаунты Sandbox, и сам аккаунт Apple.

Регистрация продукта проходит нормально:
registerProduct() {
        this.iap.verbosity = this.iap.DEBUG;

        this.iap.register({
            id: MONEYCOMBO_KEY,
            type: this.iap.CONSUMABLE
        })

        this.registerHandlersForPurchase(MONEYCOMBO_KEY)

        this.product = this.iap.get(MONEYCOMBO_KEY)

        this.iap.refresh()

        this.iap.when(MONEYCOMBO_KEY).updated((p) => {
            this.product = p
            this.title = p.title
            this.price = p.price
        })
    }


Метод для отслеживания:
registerHandlersForPurchase(productId) {
        let self = this.iap;

        this.iap.when(productId).updated(function (product) {
            if (product.loaded && product.valid && product.state === self.APPROVED && product.transaction != null) {
                product.finish();
            }
        });

        this.iap.when(productId).registered((product: IAPProduct) => {
            // alert(` owned ${product.owned}`);
        });

        this.iap.when(productId).owned((product: IAPProduct) => {
            console.error('finished')
            product.finish();
        });

        this.iap.when(productId).approved((product: IAPProduct) => {
            // alert('approved');
            product.finish();
        });

        this.iap.when(productId).refunded((product: IAPProduct) => {
            // alert('refunded');
        });

        this.iap.when(productId).expired((product: IAPProduct) => {
            // alert('expired');
        });
    }


Метод для покупки:
buyMoneyCombo(form: NgForm) {
        this.registerHandlersForPurchase(MONEYCOMBO_KEY)
        this.date = form.value.date
        this.iap.order(MONEYCOMBO_KEY)
        this.iap.refresh()
    }


Как бы я не пытался менять последовательность действий, в консоле все действия останавливаются на сообщении:
"InAppPurchase[js]: product test has a transaction in progress: 1000000628239595"


В чем проблема? Почему хэндлеры могут не срабатывать?
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
khegay
@khegay Автор вопроса
Founder, Garuna
Проблема решилась глубоким анализом кода.

Оказалось, что сообщение
"InAppPurchase[js]: product test has a transaction in progress: 1000000628239595"

появляется уже после завершения транзакции.

А все действия нужно производить после того, как сработает хэндлер:
this.iap.when(MONEYCOMBO_KEY).approved((product: IAPProduct) => {
            product.finish()
            this.getMoney()
        })
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы