React Native IAP 12.8.2安卓端无法消耗内购商品求助
React Native IAP 12.8.2 安卓端消耗型内购解决方案
React Native IAP 12.8.2 版本已将原有的ConsumePurchase方法合并到finishTransaction中,安卓端需通过配置该方法的参数实现商品消耗,以下是具体实现步骤:
1. 新购买交易的消耗处理
在用户完成购买、你已确认向用户发放套餐内容后,调用finishTransaction并传入以下参数完成消耗:
import RNIap, { Platform } from 'react-native-iap'; const handleConsumablePurchase = async (purchaseRes) => { // 1. 先验证购买凭证的合法性(建议调用后端接口验证) // 2. 向用户发放购买的套餐内容 // 3. 完成交易并消耗商品 try { await RNIap.finishTransaction({ purchase: Platform.OS === 'ios' ? purchaseRes.transactionId : purchaseRes.purchaseToken, isConsumable: true, developerPayloadAndroid: '', // 按需传入自定义载荷 }); } catch (err) { console.error('商品消耗失败:', err); } };
2. 历史未消耗交易的处理
如果存在用户已购买但未消耗的商品记录,需在App启动时调用getAvailablePurchases获取未完成交易,再对消耗型商品执行消耗操作:
const processUnfinishedPurchases = async () => { try { const purchases = await RNIap.getAvailablePurchases(); for (const item of purchases) { // 根据你的商品ID判断是否为消耗型商品 if (item.productId === 'your_consumable_product_id') { await RNIap.finishTransaction({ purchase: Platform.OS === 'ios' ? item.transactionId : item.purchaseToken, isConsumable: true, developerPayloadAndroid: '', }); } } } catch (err) { console.error('处理未完成交易失败:', err); } }; // 在App初始化时执行 // useEffect(() => { // processUnfinishedPurchases(); // }, []);
关键注意事项
- 顺序不能反:必须先完成内容发放,再调用
finishTransaction,防止异常情况导致用户未拿到商品但无法再次购买。 - 安卓端必须传入
purchaseToken作为purchase参数,不能使用其他标识字段。 isConsumable: true仅针对消耗型商品设置,订阅类商品无需配置该参数。
内容的提问来源于stack exchange,提问作者Kanika Arora
相关产品推荐
相关产品推荐

