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

React Native iOS16.3以下版本内购优惠码功能实现问询

实现iOS 16.3以下设备的应用内购买优惠码功能

由于react-native-iap未封装iOS 16.3以下设备的优惠码兑换API,你可以通过自定义原生iOS模块直接调用Apple官方API来实现功能,该方案支持iOS 14.0及以上版本(覆盖16.3以下的多数主流设备)。

步骤1:创建自定义iOS原生模块

  1. 在React Native项目的ios目录下,新建头文件RNIAPCodeRedemption.h:
#import <React/RCTBridgeModule.h>

@interface RNIAPCodeRedemption : NSObject <RCTBridgeModule>
@end
  1. 新建实现文件RNIAPCodeRedemption.m:
#import "RNIAPCodeRedemption.h"
#import <StoreKit/StoreKit.h>

@implementation RNIAPCodeRedemption

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(presentCodeRedemptionSheet:(RCTResponseSenderBlock)callback) {
  if (@available(iOS 14.0, *)) {
    dispatch_async(dispatch_get_main_queue(), ^{
      [[SKPaymentQueue defaultQueue] presentCodeRedemptionSheet];
      callback(@[[NSNull null], @"兑换界面已成功弹出"]);
    });
  } else {
    callback(@[NSError.errorWithDomain:@"RNIAPCodeRedemption" code:-1 userInfo:@{NSLocalizedDescriptionKey:@"iOS版本低于14.0,不支持应用内兑换优惠码"}], nil);
  }
}

@end

步骤2:在React Native中调用原生模块

在JS业务代码中导入并调用模块方法:

import { NativeModules } from 'react-native';

const { RNIAPCodeRedemption } = NativeModules;

// 触发优惠码兑换界面
const handleRedeemCode = async () => {
  try {
    const result = await RNIAPCodeRedemption.presentCodeRedemptionSheet();
    console.log(result);
    // 处理兑换后的后续逻辑(无需手动监听结果,StoreKit会自动处理并同步到应用内购买状态)
  } catch (error) {
    console.error('兑换失败:', error);
    // 给用户提示,比如版本过低引导升级
  }
};

注意事项

  • 确保项目已配置StoreKit相关权限,Info.plist中需包含应用内购买所需的权限声明(若未添加)。
  • iOS 14.0以下设备无法支持应用内兑换,需给用户明确提示。
  • 测试时请使用真实iOS设备,模拟器可能无法正常加载兑换界面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:22:41