无法在 ionic-native/in-app-purchase-2 中完成交易

Rom*_*gay 5 javascript cordova ionic-framework angular

我正在使用 Ionic 4 / Angular 8 / Cordova 开发应用程序

我已经安装了应用内购买 2并进行了设置。Apple Developer 和 Sandbox 帐户都可以。

产品注册就可以了:

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
    })
}
Run Code Online (Sandbox Code Playgroud)

事件处理程序:

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');
    });
}
Run Code Online (Sandbox Code Playgroud)

购买方式:

buyMoneyCombo(form: NgForm) {
    this.registerHandlersForPurchase(MONEYCOMBO_KEY)
    this.date = form.value.date
    this.iap.order(MONEYCOMBO_KEY)
    this.iap.refresh()
}
Run Code Online (Sandbox Code Playgroud)

问题:

控制台说:

"InAppPurchase[js]: product test has a transaction in progress: 1000000628239595"
Run Code Online (Sandbox Code Playgroud)

交易无法完成。为什么?

Rom*_*gay 2

因此,经过一周的研究,我找到了解决方案。

并且没有问题:交易完成后显示来自Apple的消息:

"InAppPurchase[js]: product test has a transaction in progress: 1000000628239595"
Run Code Online (Sandbox Code Playgroud)

并且所有购买逻辑都必须在里面声明:

this.iap.when(MONEYCOMBO_KEY).approved((product: IAPProduct) => {
        product.finish()
        this.getMoney()
    })
Run Code Online (Sandbox Code Playgroud)