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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:57:18