如何在React Native内购库实现订阅?更新后无法获取基础订阅详情
React Native内购订阅功能实现:获取基础订阅详情及价格
你的问题核心是未正确提取返回结果中的基础订阅字段——多数RN内购库(如react-native-iap)更新后,基础订阅详情直接包含在返回的每个订阅对象中,subscriptionOfferDetails仅对应优惠套餐信息。以下是修复方案:
1. 明确返回数据结构
调用getSubscriptions后,每个订阅项通常包含这些基础字段(不同库字段名可能略有差异):
productId:订阅唯一IDtitle:订阅名称description:订阅描述price:价格数值formattedPrice:格式化后的显示价格(如"¥12.00")subscriptionPeriod:订阅周期标识(如"P1M"代表每月)subscriptionOfferDetails:优惠套餐数组(含折扣、免费试用等选项)
2. 修改代码提取完整详情
调整代码逻辑,遍历订阅列表提取基础信息和优惠套餐:
const fetchSubscriptions = async () => { try { const response = await getSubscriptions({ skus: myProducts }); setSubscriptions(response); console.log('完整订阅响应:', response); // 过滤出有效订阅(含基础信息或优惠套餐) const validSubscriptions = response.filter(sub => (sub.formattedPrice && sub.title) || (sub.subscriptionOfferDetails?.length > 0) ); const isPageUnlocked = validSubscriptions.length > 0; if (isPageUnlocked) { Alert.alert('Success', 'Page unlocked!'); setShowads(false); // 遍历提取订阅详情 validSubscriptions.forEach(sub => { console.log('基础订阅ID:', sub.productId); console.log('基础订阅名称:', sub.title); console.log('基础订阅价格:', sub.formattedPrice); console.log('订阅周期:', sub.subscriptionPeriod); // 处理优惠套餐信息 if (sub.subscriptionOfferDetails) { sub.subscriptionOfferDetails.forEach(offer => { console.log('优惠套餐ID:', offer.offerId); console.log('优惠价格:', offer.formattedPrice); console.log('优惠周期:', offer.subscriptionPeriod); }); } }); } else { setShowads(true); Alert.alert('Error', 'My dear, No available subscription to unlock the page.'); } } catch (error) { console.log('Error fetching subscriptions: ', error); } };
3. 排查注意事项
- 若仍无法获取基础字段,检查内购库版本,确保升级到最新稳定版
- 核对开发者后台(Apple App Store Connect/Google Play Console)中订阅产品的SKU与代码中
myProducts完全一致 - 部分库可能需要额外配置权限或参数才能返回完整字段,可查阅对应库的官方文档确认
内容的提问来源于stack exchange,提问作者Samuel Edeh
相关产品推荐
相关产品推荐

