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

react-native-iap v14.4 iOS订阅返回空数组,Android正常问题求助

React Native IAP v14.4 iOS端订阅返回空数组问题排查

问题描述

使用react-native-iap v14.4版本获取App Store Connect创建的订阅时,Android端可正常返回订阅数据,但iOS端始终返回空数组[]。已确认以下配置:

  • 订阅状态为「Ready to submit」
  • 商务板块内容已确认并激活
  • 订阅已关联至应用分发板块
  • 订阅创建已超过10小时
  • 订阅面向全球所有地区开放

核心代码如下:

import { StyleSheet, Text, View, } from 'react-native';
import { useContext, useEffect, useState } from 'react';

import { colors } from '../utils/theme';
import { useIAP, ErrorCode } from 'react-native-iap';
import { useNavigation } from '@react-navigation/core';
import { SafeAreaView } from 'react-native-safe-area-context';

export default function SubscriptionScreen() {
  const navigation = useNavigation()
  const productIds = ['default']

  const { connected, subscriptions, fetchProducts, requestPurchase } =
    useIAP({
      onPurchaseSuccess: (purchase) => {
        console.log('Purchase successful:', purchase);
      },
      onPurchaseError: (error) => {
        console.error('Purchase failed:', error);
      },
    });

  useEffect(() => {
    if (connected) {
      fetchProducts({ skus: productIds, type: 'subs' });
    }
  }, [connected]);

  return (
    <SafeAreaView>
      {console.log(subscriptions)}
      <View>
        <Text>{JSON.stringify(subscriptions)}</Text>
        <Text >Votre repas</Text>
      </View>
    </SafeAreaView>
  )
}

排查与解决方案

1. 核对SKU大小写匹配

App Store Connect的订阅ID(SKU)是大小写敏感的,确保代码中productIds里的'default'和后台配置的SKU完全一致,包括大小写格式。

2. 确认测试环境配置

  • 必须使用Sandbox测试账号,并在iOS设备的「设置」->「App Store」中登录该账号(禁止用生产账号测试)。
  • 优先用真机测试,部分旧版本模拟器可能存在API兼容性问题,导致无法获取订阅数据。

3. 增加错误捕获排查隐藏问题

修改useEffect中的调用逻辑,添加错误捕获,查看具体报错信息:

useEffect(() => {
  const loadSubscriptions = async () => {
    if (connected) {
      try {
        const result = await fetchProducts({ skus: productIds, type: 'subs' });
        console.log('Fetch products result:', result);
      } catch (error) {
        console.error('Fetch products error:', error);
        // 根据ErrorCode判断错误类型
        if (error.code === ErrorCode.IAP_NOT_AVAILABLE) {
          console.log('当前设备不支持内购');
        } else if (error.code === ErrorCode.PRODUCTS_REQUEST_FAILED) {
          console.log('订阅请求失败');
        }
      }
    }
  };
  loadSubscriptions();
}, [connected]);

4. 检查App Store Connect订阅配置细节

  • 确认订阅的「价格等级」已正确设置,对应地区的价格规则已生效。
  • 检查订阅的「有效期」「计费周期」等必填项是否完整,无遗漏配置。
  • 若应用未提交过正式版本,需确保订阅已关联至「App Store测试版本」的内购项目列表中。

5. 验证iOS项目配置

  • 检查Info.plist中是否添加了必要权限,可尝试添加NSAppleMusicUsageDescription(部分内购场景依赖该权限)。
  • 重新执行pod install,清理Xcode缓存(Cmd+Shift+K)后重新编译项目,确保react-native-iap的依赖正确安装。

6. 等待配置同步

App Store Connect的内购配置同步到Sandbox环境有时会延迟,可再等待数小时后重试,或重新保存订阅配置触发同步。

内容的提问来源于stack exchange,提问作者ZaKeR GFX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:42:42