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

React Native IAP V8.1.1中requestSubscription返回true而非SubscriptionPurchase对象

react-native-iap requestSubscription 返回 true 而非 SubscriptionPurchase 对象的排查与解决

问题背景

使用 react-native V0.65.1 + react-native-iap V8.1.1 版本,调用requestSubscription方法后,日志输出iap data: true,但官方文档明确该方法应返回SubscriptionPurchase对象,导致后续依赖data.productId等字段的逻辑报错。

核心调用代码:

RNIap.requestSubscription({ sku: chosen }).then((data) => {
  console.log('iap data:', data);
  user.upgradeUser({
    productId: data.productId,
    purchaseToken: Platform.select({ ios: data.transactionReceipt, android: data.purchaseToken }),
  }).then(() => {
    setloading(false);
    RNIap.finishTransaction(data, false);
    navigation.navigate('PlusCeleb');
  }).catch(() => {
    setloading(false);
  });
}).catch((err) => {
  setloading(false);
  console.log('iap err', err);
  Message(
    err.message,
    'warning',
  );
});

可能原因及解决步骤

1. 版本兼容性冲突

react-native-iap V8.x 版本的API设计与 react-native 0.65.x 存在兼容性差异,部分场景下requestSubscription会返回布尔值而非完整购买对象。

  • 方案1:降级 react-native-iap 到 V7.x 系列(该版本与 RN 0.65.x 适配更稳定)
  • 方案2:升级 react-native 到 0.66+ 版本,以适配 react-native-iap V8.x 的API规范

2. 初始化流程不完整

调用requestSubscription前,必须确保完成以下初始化步骤:

  • 调用RNIap.initConnection()建立与内购服务的连接
  • 调用RNIap.getSubscriptions([chosen])验证sku的有效性,确认商品已在对应平台配置

3. 平台配置缺失

Android端

  • 确认Google Play Console中已创建并发布订阅商品到测试轨道
  • 应用包名、签名证书与Google Play Console配置一致
  • AndroidManifest.xml中已添加<uses-permission android:name="com.android.vending.BILLING" />权限

iOS端

  • App Store Connect中已配置订阅项目,测试账号已加入沙盒测试列表
  • 确认SKPaymentQueue的监听逻辑正确,部分场景下购买对象会通过监听事件返回,而非requestSubscription的Promise

临时修复方案

若暂时无法调整版本,可改用购买事件监听的方式获取完整购买对象:

import { useEffect } from 'react';
import { Platform } from 'react-native';
import RNIap from 'react-native-iap';

// 组件内部添加监听
useEffect(() => {
  // 监听购买更新事件
  const purchaseListener = RNIap.purchaseUpdatedListener((purchase) => {
    if (purchase.productId === chosen) {
      console.log('完整购买对象:', purchase);
      // 执行升级逻辑
      user.upgradeUser({
        productId: purchase.productId,
        purchaseToken: Platform.select({ 
          ios: purchase.transactionReceipt, 
          android: purchase.purchaseToken 
        }),
      }).then(() => {
        setloading(false);
        RNIap.finishTransaction(purchase, false);
        navigation.navigate('PlusCeleb');
      }).catch(() => {
        setloading(false);
      });
    }
  });

  // 监听购买错误事件
  const errorListener = RNIap.purchaseErrorListener((error) => {
    setloading(false);
    console.log('iap err', error);
    Message(error.message, 'warning');
  });

  // 组件卸载时移除监听
  return () => {
    purchaseListener.remove();
    errorListener.remove();
  };
}, [chosen, navigation]);

// 发起订阅请求
RNIap.requestSubscription({ sku: chosen }).catch((err) => {
  setloading(false);
  console.log('iap err', err);
  Message(err.message, 'warning');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:10:57