|
1 | | -#import <React/RCTBridgeModule.h> |
2 | | - |
3 | | -@interface RCT_EXTERN_MODULE(RNQonversion, NSObject) |
4 | | - |
5 | | -RCT_EXTERN_METHOD(storeSDKInfo:(NSString *)source version:(NSString *)version) |
6 | | -RCT_EXTERN_METHOD(initializeSdk:(NSString *)key launchModeKey:(NSString *)launchModeKey environmentKey:(NSString *)environmentKey cacheLifetimeKey:(NSString *)cacheLifetimeKey proxyUrl:(NSString *)proxyUrl kidsMode:(BOOL)kidsMode) |
7 | | -RCT_EXTERN_METHOD(syncHistoricalData) |
8 | | -RCT_EXTERN_METHOD(syncStoreKit2Purchases) |
9 | | -RCT_EXTERN_METHOD(getPromotionalOffer:(NSString *)productId discountId:(NSString *)discountId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
10 | | -RCT_EXTERN_METHOD(purchase:(NSString *)productId quantity:(NSInteger)quantity contextKeys:(NSArray *)contextKeys promoOffer:(NSDictionary *)promoOffer resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
11 | | -RCT_EXTERN_METHOD(setDefinedProperty:(NSString *)property value:(NSString *)value) |
12 | | -RCT_EXTERN_METHOD(setCustomProperty:(NSString *)property value:(NSString *)value) |
13 | | -RCT_EXTERN_METHOD(userProperties:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
14 | | -RCT_EXTERN_METHOD(addAttributionData:(NSDictionary *)data provider:(NSString *)provider) |
15 | | -RCT_EXTERN_METHOD(checkEntitlements:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
16 | | -RCT_EXTERN_METHOD(products:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
17 | | -RCT_EXTERN_METHOD(offerings:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
18 | | -RCT_EXTERN_METHOD(checkTrialIntroEligibilityForProductIds:(NSArray *)data resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
19 | | -RCT_EXTERN_METHOD(restore:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
20 | | -RCT_EXTERN_METHOD(identify:(NSString *)userId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
21 | | -RCT_EXTERN_METHOD(logout) |
22 | | -RCT_EXTERN_METHOD(userInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
23 | | -RCT_EXTERN_METHOD(remoteConfig:(NSString *)contextKey resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
24 | | -RCT_EXTERN_METHOD(remoteConfigList:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
25 | | -RCT_EXTERN_METHOD(remoteConfigListForContextKeys:(NSArray<NSString *> *)contextKeys includeEmptyContextKey:(BOOL)includeEmptyContextKey resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
26 | | -RCT_EXTERN_METHOD(attachUserToExperiment:(NSString *)experimentId groupId:(NSString *)groupId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
27 | | -RCT_EXTERN_METHOD(detachUserFromExperiment:(NSString *)experimentId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
28 | | -RCT_EXTERN_METHOD(attachUserToRemoteConfiguration:(NSString *)remoteConfigurationId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
29 | | -RCT_EXTERN_METHOD(detachUserFromRemoteConfiguration:(NSString *)remoteConfigurationId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
30 | | -RCT_EXTERN_METHOD(isFallbackFileAccessible:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
31 | | -RCT_EXTERN_METHOD(collectAdvertisingID) |
32 | | -RCT_EXTERN_METHOD(collectAppleSearchAdsAttribution) |
33 | | -RCT_EXTERN_METHOD(promoPurchase:(NSString *)storeProductId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) |
34 | | -RCT_EXTERN_METHOD(presentCodeRedemptionSheet) |
35 | | - |
36 | | - @end |
| 1 | +#import "RNQonversion.h" |
| 2 | +#import "qonversion_react_native_sdk-Swift.h" |
| 3 | + |
| 4 | +@interface RNQonversion () <QonversionEventDelegate> |
| 5 | + |
| 6 | +@property (nonatomic, strong) RNQonversionImpl *impl; |
| 7 | + |
| 8 | +@end |
| 9 | + |
| 10 | +@implementation RNQonversion RCT_EXPORT_MODULE() |
| 11 | + |
| 12 | +- (instancetype)init { |
| 13 | + self = [super init]; |
| 14 | + if (self) { |
| 15 | + _impl = [[RNQonversionImpl alloc] init]; |
| 16 | + [_impl setDelegate:self]; |
| 17 | + } |
| 18 | + return self; |
| 19 | +} |
| 20 | + |
| 21 | +- (void)storeSDKInfo:(nonnull NSString *)sdkName sdkVersion:(nonnull NSString *)sdkVersion { |
| 22 | + [self.impl storeSDKInfo:sdkName version:sdkVersion]; |
| 23 | +} |
| 24 | + |
| 25 | +- (void)initializeSdk:(nonnull NSString *)projectKey launchMode:(nonnull NSString *)launchModeKey environment:(nonnull NSString *)environmentKey entitlementsCacheLifetime:(nonnull NSString *)cacheLifetimeKey proxyUrl:(NSString * _Nullable)proxyUrl kidsMode:(BOOL)kidsMode { |
| 26 | + [self.impl initializeSdk:projectKey launchModeKey:launchModeKey environmentKey:environmentKey cacheLifetimeKey:cacheLifetimeKey proxyUrl:proxyUrl kidsMode:kidsMode]; |
| 27 | +} |
| 28 | + |
| 29 | +- (void)syncHistoricalData { |
| 30 | + [self.impl syncHistoricalData]; |
| 31 | +} |
| 32 | + |
| 33 | +- (void)syncStoreKit2Purchases { |
| 34 | + [self.impl syncStoreKit2Purchases]; |
| 35 | +} |
| 36 | + |
| 37 | +- (void)getPromotionalOffer:(nonnull NSString *)productId discount:(NSString * _Nullable)discountId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject { |
| 38 | + [self.impl getPromotionalOffer:productId discountId:discountId resolve:resolve reject:reject]; |
| 39 | +} |
| 40 | + |
| 41 | +- (void)purchase:(nonnull NSString *)productId quantity:(double)quantity contextKeys:(NSArray * _Nullable)contextKeys promoOffer:(JS::NativeQonversionModule::QPromoOfferDetails &)promoOffer offerId:(NSString * _Nullable)offerId applyOffer:(BOOL)applyOffer oldProductId:(NSString * _Nullable)oldProductId updatePolicyKey:(NSString * _Nullable)updatePolicyKey resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject { |
| 42 | + NSDictionary *promoOfferDict = convertPromoOfferDetailsToDictionary(promoOffer); |
| 43 | + [self.impl purchase:productId quantity:quantity contextKeys:contextKeys promoOffer:promoOfferDict resolve:resolve reject:reject]; |
| 44 | +} |
| 45 | + |
| 46 | +- (void)setDefinedProperty:(NSString *)property value:(NSString *)value { |
| 47 | + [self.impl setDefinedProperty:property value:value]; |
| 48 | +} |
| 49 | + |
| 50 | +- (void)setCustomProperty:(NSString *)property value:(NSString *)value { |
| 51 | + [self.impl setCustomProperty:property value:value]; |
| 52 | +} |
| 53 | + |
| 54 | +- (void)userProperties:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 55 | + [self.impl userProperties:resolve reject:reject]; |
| 56 | +} |
| 57 | + |
| 58 | +- (void)addAttributionData:(NSDictionary *)data provider:(NSString *)provider { |
| 59 | + [self.impl addAttributionData:data provider:provider]; |
| 60 | +} |
| 61 | + |
| 62 | +- (void)checkEntitlements:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 63 | + [self.impl checkEntitlements:resolve reject:reject]; |
| 64 | +} |
| 65 | + |
| 66 | +- (void)products:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 67 | + [self.impl products:resolve reject:reject]; |
| 68 | +} |
| 69 | + |
| 70 | +- (void)offerings:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 71 | + [self.impl offerings:resolve reject:reject]; |
| 72 | +} |
| 73 | + |
| 74 | +- (void)checkTrialIntroEligibilityForProductIds:(NSArray *)data resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 75 | + [self.impl checkTrialIntroEligibilityForProductIds:data resolve:resolve reject:reject]; |
| 76 | +} |
| 77 | + |
| 78 | +- (void)restore:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 79 | + [self.impl restore:resolve reject:reject]; |
| 80 | +} |
| 81 | + |
| 82 | +- (void)identify:(NSString *)userId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 83 | + [self.impl identify:userId resolve:resolve reject:reject]; |
| 84 | +} |
| 85 | + |
| 86 | +- (void)logout { |
| 87 | + [self.impl logout]; |
| 88 | +} |
| 89 | + |
| 90 | +- (void)userInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 91 | + [self.impl userInfo:resolve reject:reject]; |
| 92 | +} |
| 93 | + |
| 94 | +- (void)remoteConfig:(NSString *)contextKey resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 95 | + [self.impl remoteConfig:contextKey resolve:resolve reject:reject]; |
| 96 | +} |
| 97 | + |
| 98 | +- (void)remoteConfigList:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 99 | + [self.impl remoteConfigList:resolve reject:reject]; |
| 100 | +} |
| 101 | + |
| 102 | +- (void)remoteConfigListForContextKeys:(NSArray<NSString *> *)contextKeys includeEmptyContextKey:(BOOL)includeEmptyContextKey resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 103 | + [self.impl remoteConfigListForContextKeys:contextKeys includeEmptyContextKey:includeEmptyContextKey resolve:resolve reject:reject]; |
| 104 | +} |
| 105 | + |
| 106 | +- (void)attachUserToExperiment:(NSString *)experimentId groupId:(NSString *)groupId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 107 | + [self.impl attachUserToExperiment:experimentId groupId:groupId resolve:resolve reject:reject]; |
| 108 | +} |
| 109 | + |
| 110 | +- (void)detachUserFromExperiment:(NSString *)experimentId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 111 | + [self.impl detachUserFromExperiment:experimentId resolve:resolve reject:reject]; |
| 112 | +} |
| 113 | + |
| 114 | +- (void)attachUserToRemoteConfiguration:(NSString *)remoteConfigurationId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 115 | + [self.impl attachUserToRemoteConfiguration:remoteConfigurationId resolve:resolve reject:reject]; |
| 116 | +} |
| 117 | + |
| 118 | +- (void)detachUserFromRemoteConfiguration:(NSString *)remoteConfigurationId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 119 | + [self.impl detachUserFromRemoteConfiguration:remoteConfigurationId resolve:resolve reject:reject]; |
| 120 | +} |
| 121 | + |
| 122 | +- (void)isFallbackFileAccessible:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 123 | + [self.impl isFallbackFileAccessible:resolve reject:reject]; |
| 124 | +} |
| 125 | + |
| 126 | +- (void)collectAdvertisingId { |
| 127 | + [self.impl collectAdvertisingID]; |
| 128 | +} |
| 129 | + |
| 130 | +- (void)collectAppleSearchAdsAttribution { |
| 131 | + [self.impl collectAppleSearchAdsAttribution]; |
| 132 | +} |
| 133 | + |
| 134 | +- (void)promoPurchase:(NSString *)storeProductId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { |
| 135 | + [self.impl promoPurchase:storeProductId resolve:resolve reject:reject]; |
| 136 | +} |
| 137 | + |
| 138 | +- (void)presentCodeRedemptionSheet { |
| 139 | + [self.impl presentCodeRedemptionSheet]; |
| 140 | +} |
| 141 | + |
| 142 | +- (void)syncPurchases { |
| 143 | + // Android only. |
| 144 | +} |
| 145 | + |
| 146 | +- (void)updatePurchase:(nonnull NSString *)productId offerId:(NSString * _Nullable)offerId applyOffer:(BOOL)applyOffer oldProductId:(NSString * _Nullable)oldProductId updatePolicyKey:(NSString * _Nullable)updatePolicyKey resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject { |
| 147 | + // Android only |
| 148 | +} |
| 149 | + |
| 150 | + |
| 151 | +- (void)qonversionDidReceiveUpdatedEntitlements:(NSDictionary<NSString *,id> * _Nonnull)entitlements { |
| 152 | + [self emitOnEntitlementsUpdated:entitlements]; |
| 153 | +} |
| 154 | + |
| 155 | +- (void)shouldPurchasePromoProductWith:(NSString * _Nonnull)productId { |
| 156 | + [self emitOnPromoPurchaseReceived:productId]; |
| 157 | +} |
| 158 | + |
| 159 | +#pragma mark - Private |
| 160 | + |
| 161 | +NSDictionary *convertPromoOfferDetailsToDictionary(JS::NativeQonversionModule::QPromoOfferDetails &promoOffer) { |
| 162 | + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; |
| 163 | + if (promoOffer.productDiscountId()) { |
| 164 | + dict[@"productDiscountId"] = promoOffer.productDiscountId(); |
| 165 | + } |
| 166 | + if (promoOffer.keyIdentifier()) { |
| 167 | + dict[@"keyIdentifier"] = promoOffer.keyIdentifier(); |
| 168 | + } |
| 169 | + if (promoOffer.nonce()) { |
| 170 | + dict[@"nonce"] = promoOffer.nonce(); |
| 171 | + } |
| 172 | + if (promoOffer.signature()) { |
| 173 | + dict[@"signature"] = promoOffer.signature(); |
| 174 | + } |
| 175 | + if (promoOffer.timestamp()) { |
| 176 | + dict[@"timestamp"] = @(promoOffer.timestamp().value()); |
| 177 | + } |
| 178 | + return [dict copy]; |
| 179 | +} |
| 180 | + |
| 181 | +#pragma mark - TurboModule |
| 182 | + |
| 183 | +- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule: |
| 184 | + (const facebook::react::ObjCTurboModule::InitParams &)params |
| 185 | +{ |
| 186 | + return std::make_shared<facebook::react::NativeQonversionModuleSpecJSI>(params); |
| 187 | +} |
| 188 | + |
| 189 | +@end |
0 commit comments