android - 如何在 iOS 上使用 Cordova 进行应用内购买 (IAP)?

标签 android ios cordova in-app-purchase phaser-framework

使用 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/

相关文章:

android - 当recyclerview中没有任何内容时显示ItemDecoration

ios - 使用自动布局的水平 UIScrollView

javascript - 从页面移动到另一个页面时,数据从 Sqlite 数据库中删除

IOS:通过gamecenter访问另一个游戏的成就

cordova - Phonegap Build 3.0 中的 Google Analytics

javascript - JS 进度条在 InAppBrowser 中不起作用

java - LinearLayout原因 "requestLayout() improperly called by android.widget.LinearLayout"

android admob sdk错误

android - 纵向上的 Viewpager 和横向上的两个 Pane

ios - 设置 AVSynchonizedLayer