我在使用Ionic Native的InAppPurchase2插件时遇到了一些麻烦,其中我想要做的就是在我的组件加载时加载商店,尽管我没有运气。
在我的组件中,我正在做以下事情:
ionViewDidLoad() {
this.platform.ready().then(() => {
this.inAppPurchase2.ready().then(() => this.product = 'InAppPurchase plugin called');
});
}
根据插件的Ionic Native页面上的文档,使用.ready()
函数返回一个promise,但是当我在我的设备上运行时,这段代码永远不会运行,我也不会收到错误。
我在其他地方发现了一个帖子,说你可以做类似InAppPurchase2.getPlugin().ready(() => this.product = 'InAppPurchase plugin called'));
的事情并直接从模块中调用函数,虽然我也没有任何运气,我尝试的其他任何东西都给我的打字稿代码错误。
有什么东西我想念我在这里做的事吗?
您要做的是异步填充属性。
执行此操作:创建一个调用插件的ready()函数的函数,并在promise resolve上返回您选择的字符串。
makeAPromiseCall(): Promise<any> {
return this.InAppPurchase2
.ready()
.then(() => 'InAppPurchasePlugin');
}
将此承诺分配给您的财产,如
this.product: Promise<any> = this.makeAPromiseCall();
并在您的HTML中使用角度异步管道。
{{product | async}}
我之前遇到过一些麻烦。有时候“准备好”的事件并没有像你期望的那样激发。这是我用来完成这项工作的一些代码
constructor(public store: InAppPurchase2) {} ...
this.store.ready().then((status) => {
this.logger.logEvent('store_ready', {});
console.log(JSON.stringify(this.store.get(productId)));
console.log('Store is Ready: ' + JSON.stringify(status));
console.log('Products: ' + JSON.stringify(this.store.products));
});
// This is what is missing...
this.store.refresh();
希望这会有所帮助。您还必须单独注册产品。我在blog post做了一个简短的解释。您需要调用refresh以使存储处于就绪状态。