cordova-plugin-purchase v13结合iaptic实现Google Play内购失败求助
解决cordova-plugin-purchase v13 + iaptic 内购无响应、产品获取失败问题
核心问题分析
你的代码存在几个关键遗漏:
- store初始化是异步操作,未等待产品加载完成就调用
store.get(),导致返回undefined - 未监听store的状态事件,无法排查产品加载失败原因
- 购买函数仅获取产品,未触发实际购买流程
修复步骤及代码示例
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
相关产品推荐
相关产品推荐

