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

iOS15沙箱环境react-native-iap内购失效 requestSubscription返回空数组

问题排查及解决方案

1 版本兼容性问题

你当前使用的react-native-iap@7.0.5存在iOS 15系统的已知适配缺陷:该版本对iOS 15引入的StoreKit 2框架兼容不完整,沙箱环境下会出现订阅商品查询返回空、StoreKit会话意外中断的问题,这是导致你当前现象的核心常见原因。

2 代码逻辑错误

你提供的实现代码存在两处会直接触发StoreKit异常的逻辑问题:

  • clearTransactionIOS() 方法调用位置错误:该方法用于清理未完成的历史交易,你将其放在订阅请求发起前执行,会直接中断当前已经建立的StoreKit连接,导致后续的订阅请求失败、甚至损坏整个App的StoreKit会话。
  • 未做异常分支判断:你没有校验initConnection()、getSubscriptions()的返回结果是否合法,若初始化失败、商品查询返回空的情况下直接调用requestSubscription(),必然会返回无效结果。

3 iOS配置校验项

请逐一确认以下配置是否正确:

  • App Store Connect中配置的订阅商品ID,和ENV.ENV.subsItems中填写的完全一致,无拼写、大小写、前后空格等差异,且商品状态为「准备提交」
  • 测试设备的「设置-App Store」中登录的是有效的沙箱测试账号,未使用正式Apple ID登录沙箱环境
  • Xcode项目中已开启「In-App Purchase」能力,App的bundle ID和App Store Connect中配置的完全匹配

修复建议

版本升级

优先将react-native-iap升级到7.5.1以上的7.x稳定版本,若你的RN 0.63.4兼容,可升级到8.x的兼容版本,修复iOS 15的适配问题。

代码逻辑调整

修正后的参考代码如下:

try {
  const isConnected = await RNIap.initConnection();
  if (!isConnected) {
    console.log('StoreKit连接初始化失败');
    return;
  }
  const subscriptions = await RNIap.getSubscriptions(ENV.ENV.subsItems);
  console.log('查询到的订阅商品:', subscriptions);
  if (subscriptions.length === 0) {
    console.log('未查询到有效订阅商品,请检查sku配置');
    return;
  }
  // 仅在交易完成/失败后需要清理历史交易时调用clearTransactionIOS
  // if (Platform.OS === 'ios') {
  //   await RNIap.clearTransactionIOS();
  // }
  const purchaseResult = await RNIap.requestSubscription(sku, false);
  console.log('订阅请求结果:', purchaseResult);
} catch (err) {
  console.log('内购流程异常:', err.code, err.message);
}

测试流程调整

修复后先卸载设备上的原有App,重启设备后重新安装测试,避免之前损坏的StoreKit会话影响测试结果。

内容的提问来源于stack exchange,提问作者Rajesh Koshti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:54:02