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

React Native调用getSubscriptions()无法获取iOS内购订阅的解决方案

React Native IAP getSubscriptions() 返回空数组/undefined 解决方案

问题描述

已在App Store Connect中创建订阅组并添加订阅、配置对应productId,但调用React Native IAP的getSubscriptions()函数无法获取订阅数据,日志输出:

subs undefined subscriptions: []

无报错但返回空数组。

操作步骤:

  1. 登录账号创建订阅组;
  2. 创建订阅并填写信息及productId;
  3. 编写代码调用getSubscriptions()但未生效。

代码示例:

const {
        connected,
        subscriptions, //returns subscriptions for this app.
        getSubscriptions, //Gets available subsctiptions for this app.
        currentPurchase, //current purchase for the tranasction
        finishTransaction,
        purchaseHistory, //return the purchase history of the user on the device (sandbox user in dev)
        getPurchaseHistory, //gets users purchase history
    } = useIAP();

    const subSkus = [
        'brandingSubs3999',
        ];
    
        //   get subscription
    const handleGetSubscriptions = async () => {
        try {
            if (connected) {
                console.log("subskus calling...")
                const subs = await getSubscriptions({ skus: subSkus });
                
                console.log("subs", subs, "subscriptions:", subscriptions);
            }
        } catch (error) {
            console.error("error in handle get subscription:", error)
        }
    };
    
    useEffect(() => {
        handleGetSubscriptions();
    }, []);

解决方案

一、App Store Connect 配置校验

  • 确认订阅状态:刚创建的订阅如果是**"草稿"状态**无法被客户端获取,必须完成所有必填项(价格、地区、描述等),将状态改为"准备提交"(Sandbox环境无需审核通过,但不能停留在草稿)。
  • 严格匹配Product ID:代码中的brandingSubs3999必须和App Store Connect里的订阅Product ID完全一致,包括大小写、特殊字符,不能有任何差异。
  • 确认订阅关联到订阅组:在订阅详情页检查该订阅是否正确关联到你创建的订阅组,未关联的订阅无法被识别。
  • 检查App ID权限:开发者后台的App ID必须开启**"内购项目"**功能。

二、React Native 项目配置与代码调整

  • 等待IAP连接就绪再调用:原代码的useEffect是空依赖,可能在connected为false时就执行了请求。修改依赖项,监听connected状态:
useEffect(() => {
  if (connected) {
    handleGetSubscriptions();
  }
}, [connected]);
  • 检查iOS端配置:
    1. Info.plist中添加NSAppleMusicUsageDescription(部分RN IAP版本依赖),确保无权限限制。
    2. Xcode项目的Capabilities中开启**"In-App Purchase"**功能。
  • 适配IAP版本:react-native-iap版本兼容性可能有问题,尝试升级到最新稳定版,或回退到适配当前RN版本的版本。

三、测试环境与账号问题

  • 使用Sandbox测试账号:必须用苹果开发者后台创建的Sandbox测试账号登录设备App Store,不能用真实账号测试内购。
  • 清理缓存重启:
    1. 卸载App,清理Xcode缓存后重新编译安装。
    2. 重启设备,避免App Store缓存导致订阅信息无法更新。
  • 地区一致性:Sandbox账号的地区要和App Store Connect中订阅的可用地区一致,否则无法获取订阅。

四、额外排查手段

  • 原生代码验证:在iOS原生项目中编写SKProductsRequest代码测试获取订阅,如果原生也失败,问题出在App Store Connect配置;如果原生成功,就是RN IAP库的配置问题。
  • 检查苹果服务状态:确认App Store Connect和Sandbox服务无故障。

内容的提问来源于stack exchange,提问作者Gohel Meet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:47:44