You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cordova-plugin-purchase v13结合iaptic实现Google Play内购失败求助

解决cordova-plugin-purchase v13 + iaptic 内购无响应、产品获取失败问题

核心问题分析

你的代码存在几个关键遗漏:

  1. store初始化是异步操作,未等待产品加载完成就调用store.get(),导致返回undefined
  2. 未监听store的状态事件,无法排查产品加载失败原因
  3. 购买函数仅获取产品,未触发实际购买流程

修复步骤及代码示例

1. 监听Store关键事件,等待产品加载完成

必须监听ready或products事件,确认产品已从Google Play加载后再进行购买操作。同时添加错误监听排查问题:

import 'cordova-plugin-purchase';

const { store, ProductType, Platform, StoreEvent } = CdvPurchase;

const iaptic = new CdvPurchase.Iaptic({
  appName: "com.app",
  apiKey: "XXX-XXX-XXX",
});

store.validator = iaptic.validator;

// 存储加载完成的产品,避免重复调用store.get()
let loadedProducts = {};

document.addEventListener("deviceready", function(){
  // 监听产品加载完成事件
  store.on(StoreEvent.PRODUCTS_LOADED, () => {
    console.log("产品加载完成");
    // 缓存加载的产品
    loadedProducts.monthly = store.get('monthly', Platform.GOOGLE_PLAY);
    loadedProducts.annual = store.get('annual', Platform.GOOGLE_PLAY);
    loadedProducts.quarterly = store.get('quarterly', Platform.GOOGLE_PLAY);
    console.log("已加载产品: ", loadedProducts);
  });

  // 监听错误事件,排查初始化或加载问题
  store.on(StoreEvent.ERROR, (error) => {
    console.error("Store错误: ", error);
  });

  // 监听产品更新事件
  store.on(StoreEvent.UPDATED, (products) => {
    console.log("产品更新: ", products);
  });

  store.register([
    {
      id: "monthly",
      type: ProductType.PAID_SUBSCRIPTION,
      platform: Platform.GOOGLE_PLAY,
    }, {
      id: "annual",
      type: ProductType.PAID_SUBSCRIPTION,
      platform: Platform.GOOGLE_PLAY,
    }, {
      id: "quarterly",
      type: ProductType.PAID_SUBSCRIPTION,
      platform: Platform.GOOGLE_PLAY,
    }
  ]);
  
  store.initialize();
}, false);

2. 完善购买函数,触发实际购买流程

修改purchaseProduct函数,确保产品存在后调用requestPurchase(),同时处理购买结果:

const purchaseProduct = (productId) => {
  const product = loadedProducts[productId];
  if (!product) {
    console.error("产品未加载或不存在: ", productId);
    return;
  }

  // 触发购买
  product.requestPurchase()
    .then((transaction) => {
      console.log("购买成功: ", transaction);
      // 这里可以处理购买成功后的逻辑,比如解锁功能
    })
    .catch((error) => {
      console.error("购买失败: ", error);
    });
};

3. 额外检查项

  • 产品ID匹配:确保代码中注册的id与Google Play控制台中订阅产品的产品ID完全一致(大小写、拼写无误差)
  • iaptic配置验证:确认appName是你的应用包名,apiKey是从iaptic后台获取的有效密钥
  • 测试环境配置:如果是测试设备,需确保已添加Google Play测试账号,且产品已在控制台设置为可测试状态

内容的提问来源于stack exchange,提问作者Paul VI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:04:52