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

React Native使用react-native-iap确认内购时遇非空参数错误

解决react-native-iap调用acknowledgePurchaseAndroid时的非空参数错误

你遇到的错误是因为Android端Kotlin代码要求token参数非空,但实际传入的值不符合要求——即便你做了空判断,也可能存在隐形空值或参数格式不匹配的问题。以下是具体排查和解决步骤:

1. 确认purchaseToken的真实值

在判断逻辑中加入日志,明确输出purchaseToken的实际内容和类型,排除看似有值但实际为空字符串、undefined或其他无效值的情况:

const purchase = {
  "purchaseToken": "fjjijcpgpadpaafpihlmlbpf.AO-J1OzNNbilg8roTwAQs-GNqMiEHWx8bcloXZs5md9u_sSekWfvhWY24DKy4yI1UegLVyEA6NmljaClMYqU2iJSDEFYMFV5og"
};

const token = purchase?.purchaseToken;
console.log('当前token值:', token, '类型:', typeof token);

if(token && token.trim() !== ''){
  RNIap.acknowledgePurchaseAndroid(token);
}else{
  console.log("Invalid Purchase Object or Purchase Token");
}

2. 适配react-native-iap版本的参数格式

不同版本的react-native-iap对acknowledgePurchaseAndroid的参数要求不同:

  • 较新版本可能要求传入包含purchaseToken的对象,而非直接传字符串:
    if(token && token.trim() !== ''){
      RNIap.acknowledgePurchaseAndroid({ purchaseToken: token });
    }
    
  • 旧版本支持直接传字符串,可根据自身使用的库版本调整。

3. 避免异步场景下的变量被修改

如果purchase对象是异步获取(比如从API或内购回调中获取),可能存在判断后、调用方法前变量被清空的情况。提前将token缓存到独立变量中,避免依赖原对象的引用:

// 假设purchase是异步获取的
const fetchPurchase = async () => {
  const purchase = await getPurchaseData(); // 你的异步获取逻辑
  const token = purchase?.purchaseToken;
  if(token && token.trim() !== ''){
    await RNIap.acknowledgePurchaseAndroid(token);
  } else {
    console.log("Invalid Purchase Object or Purchase Token");
  }
}

4. 确保token是有效的Google Play购买令牌

如果日志显示token确实是有效值,但仍然报错,可能是令牌本身无效(比如已被使用、过期),需要确认该令牌是Google Play返回的有效未确认购买令牌。

内容的提问来源于stack exchange,提问作者Mohit Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:05:10