React Native iOS16.3以下版本内购优惠码功能实现问询
实现iOS 16.3以下设备的应用内购买优惠码功能
由于react-native-iap未封装iOS 16.3以下设备的优惠码兑换API,你可以通过自定义原生iOS模块直接调用Apple官方API来实现功能,该方案支持iOS 14.0及以上版本(覆盖16.3以下的多数主流设备)。
步骤1:创建自定义iOS原生模块
- 在React Native项目的
ios目录下,新建头文件RNIAPCodeRedemption.h:
#import <React/RCTBridgeModule.h> @interface RNIAPCodeRedemption : NSObject <RCTBridgeModule> @end
- 新建实现文件
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
相关产品推荐
相关产品推荐

