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
相关产品推荐
相关产品推荐

