使用 Apache Cordova 和 https://github.com/j3k0/cordova-plugin-purchase 在 Android 上成功交付应用内购买 (IAP) 后我无法让它在 iOS 上正常工作。问题是,一旦单击该项目,价格就会显示其详细信息等,但如果用户单击“取消”,则用户无法再购买任何东西。除非重新启动游戏,否则据我所知我应该处理拒绝/取消事件。尝试过这些,但到目前为止还没有成功。
这就是我尝试处理这些事件(拒绝/取消)的方式,包括在代码的不同位置使用 store.refresh() 以及不使用它:
// Handle rejection and cancel events.
store.when("com.XX.YY.gems5").rejected(function(order) {
store.refresh();
that.game.state.start("GemsState");
store.refresh();
});
store.when("com.XX.YY.gems5").cancelled(function(order) {
store.refresh();
that.game.state.start("GemsState");
store.refresh();
});
在 Android 上正确运行的代码(不需要进行处理即可正常运行):
'use strict';
var that = this;
// Prepare product.
store.register({
id: "com.XX.YY.gems5",
alias: "Gems 5",
type: store.CONSUMABLE
});
// Purchase product.
store.order("com.XX.YY.gems5");
store.refresh();
store.when("com.XX.YY.gems5").approved(function (order) {
order.finish();
store.refresh();
// Add extra gems.
localStorage.gems = parseInt(localStorage.gems) + 5; // Add 5 gems.
that.upgrade_sound.play(); // Play upgrade sound.
that.game.state.start("GemsState");
that.menu_items[1].select(); // Select second item.
});
我正在使用 Phaser 2 和 ES5。
最佳答案
显然这个插件的工作原理有时在 Android 和 iOS 上有一点不同的行为,这里就是这种情况。首先,store.refresh();
应该出现一次并位于该代码的末尾。下面是运行良好的 iOS 示例:
'use strict';
var that = this;
store.register({
id: "com.XX.YY.gems5",
alias: "Gems 5",
type: store.CONSUMABLE
});
store.order("com.XX.YY.gems5"); // Initialize purchase.
// Handle approved purchase.
store.when("XX.YY.ZZ.gems20").approved(function (order) {
// Add extra gems.
localStorage.gems = parseInt(localStorage.gems) + 20; // Add 20 gems.
order.finish(); // Finish purchase.
});
store.refresh(); // Refresh the store to start everything.
还有一些缺点,如果您想获得进一步的见解,可以查看 issue#333 (comment)
关于android - 如何在 iOS 上使用 Cordova 进行应用内购买 (IAP)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350220/