@qonversion/react-native-sdk 10.0.0-RC1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +129 -0
- package/android/build.gradle +92 -0
- package/android/gradle.properties +6 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/qonversion/reactnativesdk/EntitiesConverter.kt +135 -0
- package/android/src/main/java/com/qonversion/reactnativesdk/NoCodesModule.kt +76 -0
- package/android/src/main/java/com/qonversion/reactnativesdk/QonversionModule.kt +278 -0
- package/android/src/main/java/com/qonversion/reactnativesdk/QonversionPackage.kt +43 -0
- package/android/src/main/java/com/qonversion/reactnativesdk/Utils.kt +32 -0
- package/ios/RNNoCodes.h +5 -0
- package/ios/RNNoCodes.mm +61 -0
- package/ios/RNNoCodesImpl.swift +69 -0
- package/ios/RNQonversion.h +5 -0
- package/ios/RNQonversion.mm +189 -0
- package/ios/RNQonversionImpl.swift +250 -0
- package/ios/qonversion-react-native-sdk-Bridging-Header.h +6 -0
- package/lib/module/NoCodes.js +32 -0
- package/lib/module/NoCodes.js.map +1 -0
- package/lib/module/NoCodesApi.js +2 -0
- package/lib/module/NoCodesApi.js.map +1 -0
- package/lib/module/NoCodesConfig.js +10 -0
- package/lib/module/NoCodesConfig.js.map +1 -0
- package/lib/module/NoCodesConfigBuilder.js +35 -0
- package/lib/module/NoCodesConfigBuilder.js.map +1 -0
- package/lib/module/Qonversion.js +35 -0
- package/lib/module/Qonversion.js.map +1 -0
- package/lib/module/QonversionApi.js +4 -0
- package/lib/module/QonversionApi.js.map +1 -0
- package/lib/module/QonversionConfig.js +16 -0
- package/lib/module/QonversionConfig.js.map +1 -0
- package/lib/module/QonversionConfigBuilder.js +90 -0
- package/lib/module/QonversionConfigBuilder.js.map +1 -0
- package/lib/module/dto/Entitlement.js +24 -0
- package/lib/module/dto/Entitlement.js.map +1 -0
- package/lib/module/dto/EntitlementsUpdateListener.js +4 -0
- package/lib/module/dto/EntitlementsUpdateListener.js.map +1 -0
- package/lib/module/dto/Experiment.js +11 -0
- package/lib/module/dto/Experiment.js.map +1 -0
- package/lib/module/dto/ExperimentGroup.js +11 -0
- package/lib/module/dto/ExperimentGroup.js.map +1 -0
- package/lib/module/dto/IntroEligibility.js +9 -0
- package/lib/module/dto/IntroEligibility.js.map +1 -0
- package/lib/module/dto/NoCodesAction.js +11 -0
- package/lib/module/dto/NoCodesAction.js.map +1 -0
- package/lib/module/dto/NoCodesError.js +13 -0
- package/lib/module/dto/NoCodesError.js.map +1 -0
- package/lib/module/dto/NoCodesListener.js +4 -0
- package/lib/module/dto/NoCodesListener.js.map +1 -0
- package/lib/module/dto/Offering.js +14 -0
- package/lib/module/dto/Offering.js.map +1 -0
- package/lib/module/dto/Offerings.js +13 -0
- package/lib/module/dto/Offerings.js.map +1 -0
- package/lib/module/dto/Product.js +114 -0
- package/lib/module/dto/Product.js.map +1 -0
- package/lib/module/dto/PromoPurchasesListener.js +4 -0
- package/lib/module/dto/PromoPurchasesListener.js.map +1 -0
- package/lib/module/dto/PromotionalOffer.js +10 -0
- package/lib/module/dto/PromotionalOffer.js.map +1 -0
- package/lib/module/dto/PurchaseModel.js +26 -0
- package/lib/module/dto/PurchaseModel.js.map +1 -0
- package/lib/module/dto/PurchaseOptions.js +15 -0
- package/lib/module/dto/PurchaseOptions.js.map +1 -0
- package/lib/module/dto/PurchaseOptionsBuilder.js +117 -0
- package/lib/module/dto/PurchaseOptionsBuilder.js.map +1 -0
- package/lib/module/dto/PurchaseUpdateModel.js +32 -0
- package/lib/module/dto/PurchaseUpdateModel.js.map +1 -0
- package/lib/module/dto/QonversionError.js +15 -0
- package/lib/module/dto/QonversionError.js.map +1 -0
- package/lib/module/dto/RemoteConfig.js +11 -0
- package/lib/module/dto/RemoteConfig.js.map +1 -0
- package/lib/module/dto/RemoteConfigList.js +18 -0
- package/lib/module/dto/RemoteConfigList.js.map +1 -0
- package/lib/module/dto/RemoteConfigurationSource.js +13 -0
- package/lib/module/dto/RemoteConfigurationSource.js.map +1 -0
- package/lib/module/dto/ScreenPresentationConfig.js +22 -0
- package/lib/module/dto/ScreenPresentationConfig.js.map +1 -0
- package/lib/module/dto/SubscriptionPeriod.js +26 -0
- package/lib/module/dto/SubscriptionPeriod.js.map +1 -0
- package/lib/module/dto/Transaction.js +18 -0
- package/lib/module/dto/Transaction.js.map +1 -0
- package/lib/module/dto/User.js +10 -0
- package/lib/module/dto/User.js.map +1 -0
- package/lib/module/dto/UserProperties.js +71 -0
- package/lib/module/dto/UserProperties.js.map +1 -0
- package/lib/module/dto/UserProperty.js +17 -0
- package/lib/module/dto/UserProperty.js.map +1 -0
- package/lib/module/dto/enums.js +425 -0
- package/lib/module/dto/enums.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductInAppDetails.js +16 -0
- package/lib/module/dto/storeProducts/ProductInAppDetails.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductInstallmentPlanDetails.js +25 -0
- package/lib/module/dto/storeProducts/ProductInstallmentPlanDetails.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductOfferDetails.js +76 -0
- package/lib/module/dto/storeProducts/ProductOfferDetails.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductPrice.js +37 -0
- package/lib/module/dto/storeProducts/ProductPrice.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductPricingPhase.js +52 -0
- package/lib/module/dto/storeProducts/ProductPricingPhase.js.map +1 -0
- package/lib/module/dto/storeProducts/ProductStoreDetails.js +114 -0
- package/lib/module/dto/storeProducts/ProductStoreDetails.js.map +1 -0
- package/lib/module/dto/storeProducts/SKPaymentDiscount.js +13 -0
- package/lib/module/dto/storeProducts/SKPaymentDiscount.js.map +1 -0
- package/lib/module/dto/storeProducts/SKProduct.js +22 -0
- package/lib/module/dto/storeProducts/SKProduct.js.map +1 -0
- package/lib/module/dto/storeProducts/SKProductDiscount.js +16 -0
- package/lib/module/dto/storeProducts/SKProductDiscount.js.map +1 -0
- package/lib/module/dto/storeProducts/SKSubscriptionPeriod.js +10 -0
- package/lib/module/dto/storeProducts/SKSubscriptionPeriod.js.map +1 -0
- package/lib/module/dto/storeProducts/SkuDetails.js +30 -0
- package/lib/module/dto/storeProducts/SkuDetails.js.map +1 -0
- package/lib/module/index.js +40 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/Mapper.js +676 -0
- package/lib/module/internal/Mapper.js.map +1 -0
- package/lib/module/internal/NoCodesInternal.js +70 -0
- package/lib/module/internal/NoCodesInternal.js.map +1 -0
- package/lib/module/internal/QonversionInternal.js +237 -0
- package/lib/module/internal/QonversionInternal.js.map +1 -0
- package/lib/module/internal/specs/NativeNoCodesModule.js +5 -0
- package/lib/module/internal/specs/NativeNoCodesModule.js.map +1 -0
- package/lib/module/internal/specs/NativeQonversionModule.js +5 -0
- package/lib/module/internal/specs/NativeQonversionModule.js.map +1 -0
- package/lib/module/internal/utils.js +10 -0
- package/lib/module/internal/utils.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NoCodes.d.ts +23 -0
- package/lib/typescript/src/NoCodes.d.ts.map +1 -0
- package/lib/typescript/src/NoCodesApi.d.ts +20 -0
- package/lib/typescript/src/NoCodesApi.d.ts.map +1 -0
- package/lib/typescript/src/NoCodesConfig.d.ts +8 -0
- package/lib/typescript/src/NoCodesConfig.d.ts.map +1 -0
- package/lib/typescript/src/NoCodesConfigBuilder.d.ts +26 -0
- package/lib/typescript/src/NoCodesConfigBuilder.d.ts.map +1 -0
- package/lib/typescript/src/Qonversion.d.ts +26 -0
- package/lib/typescript/src/Qonversion.d.ts.map +1 -0
- package/lib/typescript/src/QonversionApi.d.ts +285 -0
- package/lib/typescript/src/QonversionApi.d.ts.map +1 -0
- package/lib/typescript/src/QonversionConfig.d.ts +14 -0
- package/lib/typescript/src/QonversionConfig.d.ts.map +1 -0
- package/lib/typescript/src/QonversionConfigBuilder.d.ts +65 -0
- package/lib/typescript/src/QonversionConfigBuilder.d.ts.map +1 -0
- package/lib/typescript/src/dto/Entitlement.d.ts +22 -0
- package/lib/typescript/src/dto/Entitlement.d.ts.map +1 -0
- package/lib/typescript/src/dto/EntitlementsUpdateListener.d.ts +10 -0
- package/lib/typescript/src/dto/EntitlementsUpdateListener.d.ts.map +1 -0
- package/lib/typescript/src/dto/Experiment.d.ts +9 -0
- package/lib/typescript/src/dto/Experiment.d.ts.map +1 -0
- package/lib/typescript/src/dto/ExperimentGroup.d.ts +9 -0
- package/lib/typescript/src/dto/ExperimentGroup.d.ts.map +1 -0
- package/lib/typescript/src/dto/IntroEligibility.d.ts +7 -0
- package/lib/typescript/src/dto/IntroEligibility.d.ts.map +1 -0
- package/lib/typescript/src/dto/NoCodesAction.d.ts +10 -0
- package/lib/typescript/src/dto/NoCodesAction.d.ts.map +1 -0
- package/lib/typescript/src/dto/NoCodesError.d.ts +12 -0
- package/lib/typescript/src/dto/NoCodesError.d.ts.map +1 -0
- package/lib/typescript/src/dto/NoCodesListener.d.ts +34 -0
- package/lib/typescript/src/dto/NoCodesListener.d.ts.map +1 -0
- package/lib/typescript/src/dto/Offering.d.ts +11 -0
- package/lib/typescript/src/dto/Offering.d.ts.map +1 -0
- package/lib/typescript/src/dto/Offerings.d.ts +9 -0
- package/lib/typescript/src/dto/Offerings.d.ts.map +1 -0
- package/lib/typescript/src/dto/Product.d.ts +95 -0
- package/lib/typescript/src/dto/Product.d.ts.map +1 -0
- package/lib/typescript/src/dto/PromoPurchasesListener.d.ts +12 -0
- package/lib/typescript/src/dto/PromoPurchasesListener.d.ts.map +1 -0
- package/lib/typescript/src/dto/PromotionalOffer.d.ts +9 -0
- package/lib/typescript/src/dto/PromotionalOffer.d.ts.map +1 -0
- package/lib/typescript/src/dto/PurchaseModel.d.ts +19 -0
- package/lib/typescript/src/dto/PurchaseModel.d.ts.map +1 -0
- package/lib/typescript/src/dto/PurchaseOptions.d.ts +15 -0
- package/lib/typescript/src/dto/PurchaseOptions.d.ts.map +1 -0
- package/lib/typescript/src/dto/PurchaseOptionsBuilder.d.ts +84 -0
- package/lib/typescript/src/dto/PurchaseOptionsBuilder.d.ts.map +1 -0
- package/lib/typescript/src/dto/PurchaseUpdateModel.d.ts +25 -0
- package/lib/typescript/src/dto/PurchaseUpdateModel.d.ts.map +1 -0
- package/lib/typescript/src/dto/QonversionError.d.ts +11 -0
- package/lib/typescript/src/dto/QonversionError.d.ts.map +1 -0
- package/lib/typescript/src/dto/RemoteConfig.d.ts +10 -0
- package/lib/typescript/src/dto/RemoteConfig.d.ts.map +1 -0
- package/lib/typescript/src/dto/RemoteConfigList.d.ts +10 -0
- package/lib/typescript/src/dto/RemoteConfigList.d.ts.map +1 -0
- package/lib/typescript/src/dto/RemoteConfigurationSource.d.ts +11 -0
- package/lib/typescript/src/dto/RemoteConfigurationSource.d.ts.map +1 -0
- package/lib/typescript/src/dto/ScreenPresentationConfig.d.ts +18 -0
- package/lib/typescript/src/dto/ScreenPresentationConfig.d.ts.map +1 -0
- package/lib/typescript/src/dto/SubscriptionPeriod.d.ts +21 -0
- package/lib/typescript/src/dto/SubscriptionPeriod.d.ts.map +1 -0
- package/lib/typescript/src/dto/Transaction.d.ts +16 -0
- package/lib/typescript/src/dto/Transaction.d.ts.map +1 -0
- package/lib/typescript/src/dto/User.d.ts +7 -0
- package/lib/typescript/src/dto/User.d.ts.map +1 -0
- package/lib/typescript/src/dto/UserProperties.d.ts +49 -0
- package/lib/typescript/src/dto/UserProperties.d.ts.map +1 -0
- package/lib/typescript/src/dto/UserProperty.d.ts +13 -0
- package/lib/typescript/src/dto/UserProperty.d.ts.map +1 -0
- package/lib/typescript/src/dto/enums.d.ts +343 -0
- package/lib/typescript/src/dto/enums.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductInAppDetails.d.ts +13 -0
- package/lib/typescript/src/dto/storeProducts/ProductInAppDetails.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductInstallmentPlanDetails.d.ts +20 -0
- package/lib/typescript/src/dto/storeProducts/ProductInstallmentPlanDetails.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductOfferDetails.d.ts +63 -0
- package/lib/typescript/src/dto/storeProducts/ProductOfferDetails.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductPrice.d.ts +29 -0
- package/lib/typescript/src/dto/storeProducts/ProductPrice.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductPricingPhase.d.ts +44 -0
- package/lib/typescript/src/dto/storeProducts/ProductPricingPhase.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/ProductStoreDetails.d.ts +97 -0
- package/lib/typescript/src/dto/storeProducts/ProductStoreDetails.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/SKPaymentDiscount.d.ts +10 -0
- package/lib/typescript/src/dto/storeProducts/SKPaymentDiscount.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/SKProduct.d.ts +21 -0
- package/lib/typescript/src/dto/storeProducts/SKProduct.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/SKProductDiscount.d.ts +15 -0
- package/lib/typescript/src/dto/storeProducts/SKProductDiscount.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/SKSubscriptionPeriod.d.ts +8 -0
- package/lib/typescript/src/dto/storeProducts/SKSubscriptionPeriod.d.ts.map +1 -0
- package/lib/typescript/src/dto/storeProducts/SkuDetails.d.ts +27 -0
- package/lib/typescript/src/dto/storeProducts/SkuDetails.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +41 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/internal/Mapper.d.ts +312 -0
- package/lib/typescript/src/internal/Mapper.d.ts.map +1 -0
- package/lib/typescript/src/internal/NoCodesInternal.d.ts +14 -0
- package/lib/typescript/src/internal/NoCodesInternal.d.ts.map +1 -0
- package/lib/typescript/src/internal/QonversionInternal.d.ts +60 -0
- package/lib/typescript/src/internal/QonversionInternal.d.ts.map +1 -0
- package/lib/typescript/src/internal/specs/NativeNoCodesModule.d.ts +17 -0
- package/lib/typescript/src/internal/specs/NativeNoCodesModule.d.ts.map +1 -0
- package/lib/typescript/src/internal/specs/NativeQonversionModule.d.ts +56 -0
- package/lib/typescript/src/internal/specs/NativeQonversionModule.d.ts.map +1 -0
- package/lib/typescript/src/internal/utils.d.ts +3 -0
- package/lib/typescript/src/internal/utils.d.ts.map +1 -0
- package/package.json +151 -0
- package/qonversion-react-native-sdk.podspec +21 -0
- package/src/NoCodes.ts +37 -0
- package/src/NoCodesApi.ts +22 -0
- package/src/NoCodesConfig.ts +16 -0
- package/src/NoCodesConfigBuilder.ts +40 -0
- package/src/Qonversion.ts +40 -0
- package/src/QonversionApi.ts +318 -0
- package/src/QonversionConfig.ts +32 -0
- package/src/QonversionConfigBuilder.ts +102 -0
- package/src/dto/Entitlement.ts +57 -0
- package/src/dto/EntitlementsUpdateListener.ts +11 -0
- package/src/dto/Experiment.ts +15 -0
- package/src/dto/ExperimentGroup.ts +15 -0
- package/src/dto/IntroEligibility.ts +11 -0
- package/src/dto/NoCodesAction.ts +21 -0
- package/src/dto/NoCodesError.ts +26 -0
- package/src/dto/NoCodesListener.ts +39 -0
- package/src/dto/Offering.ts +20 -0
- package/src/dto/Offerings.ts +17 -0
- package/src/dto/Product.ts +159 -0
- package/src/dto/PromoPurchasesListener.ts +13 -0
- package/src/dto/PromotionalOffer.ts +17 -0
- package/src/dto/PurchaseModel.ts +29 -0
- package/src/dto/PurchaseOptions.ts +33 -0
- package/src/dto/PurchaseOptionsBuilder.ts +127 -0
- package/src/dto/PurchaseUpdateModel.ts +43 -0
- package/src/dto/QonversionError.ts +24 -0
- package/src/dto/RemoteConfig.ts +16 -0
- package/src/dto/RemoteConfigList.ts +23 -0
- package/src/dto/RemoteConfigurationSource.ts +26 -0
- package/src/dto/ScreenPresentationConfig.ts +24 -0
- package/src/dto/SubscriptionPeriod.ts +33 -0
- package/src/dto/Transaction.ts +40 -0
- package/src/dto/User.ts +11 -0
- package/src/dto/UserProperties.ts +78 -0
- package/src/dto/UserProperty.ts +21 -0
- package/src/dto/enums.ts +389 -0
- package/src/dto/storeProducts/ProductInAppDetails.ts +17 -0
- package/src/dto/storeProducts/ProductInstallmentPlanDetails.ts +28 -0
- package/src/dto/storeProducts/ProductOfferDetails.ts +102 -0
- package/src/dto/storeProducts/ProductPrice.ts +46 -0
- package/src/dto/storeProducts/ProductPricingPhase.ts +71 -0
- package/src/dto/storeProducts/ProductStoreDetails.ts +151 -0
- package/src/dto/storeProducts/SKPaymentDiscount.ts +23 -0
- package/src/dto/storeProducts/SKProduct.ts +53 -0
- package/src/dto/storeProducts/SKProductDiscount.ts +38 -0
- package/src/dto/storeProducts/SKSubscriptionPeriod.ts +13 -0
- package/src/dto/storeProducts/SkuDetails.ts +68 -0
- package/src/index.ts +43 -0
- package/src/internal/Mapper.ts +1221 -0
- package/src/internal/NoCodesInternal.ts +84 -0
- package/src/internal/QonversionInternal.ts +370 -0
- package/src/internal/specs/NativeNoCodesModule.ts +20 -0
- package/src/internal/specs/NativeQonversionModule.ts +74 -0
- package/src/internal/utils.ts +9 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
package com.reactlibrary
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.app.Application
|
|
5
|
+
import com.facebook.react.bridge.Promise
|
|
6
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
+
import com.facebook.react.bridge.ReactMethod
|
|
8
|
+
import com.facebook.react.bridge.ReadableArray
|
|
9
|
+
import com.facebook.react.bridge.ReadableMap
|
|
10
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
11
|
+
import com.qonversion.reactnativesdk.EntitiesConverter
|
|
12
|
+
import com.qonversion.reactnativesdk.NativeQonversionModuleSpec
|
|
13
|
+
import com.qonversion.reactnativesdk.Utils.Companion.getResultListener
|
|
14
|
+
import io.qonversion.sandwich.ActivityProvider
|
|
15
|
+
import io.qonversion.sandwich.BridgeData
|
|
16
|
+
import io.qonversion.sandwich.QonversionEventsListener
|
|
17
|
+
import io.qonversion.sandwich.QonversionSandwich
|
|
18
|
+
import org.json.JSONException
|
|
19
|
+
|
|
20
|
+
@ReactModule(name = QonversionModule.NAME)
|
|
21
|
+
class QonversionModule(reactContext: ReactApplicationContext) : NativeQonversionModuleSpec(reactContext), QonversionEventsListener {
|
|
22
|
+
private val qonversionSandwich = QonversionSandwich(
|
|
23
|
+
(reactContext.applicationContext as Application),
|
|
24
|
+
object : ActivityProvider {
|
|
25
|
+
override val currentActivity: Activity?
|
|
26
|
+
get() = this@QonversionModule.currentActivity
|
|
27
|
+
},
|
|
28
|
+
this
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
override fun getName(): String {
|
|
32
|
+
return NAME
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@ReactMethod
|
|
36
|
+
override fun storeSDKInfo(source: String, sdkVersion: String) {
|
|
37
|
+
qonversionSandwich.storeSdkInfo(source, sdkVersion)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@ReactMethod
|
|
41
|
+
override fun initializeSdk(
|
|
42
|
+
projectKey: String,
|
|
43
|
+
launchModeKey: String,
|
|
44
|
+
environmentKey: String?,
|
|
45
|
+
entitlementsCacheLifetimeKey: String?,
|
|
46
|
+
proxyUrl: String?,
|
|
47
|
+
kidsMode: Boolean
|
|
48
|
+
) {
|
|
49
|
+
qonversionSandwich.initialize(
|
|
50
|
+
reactApplicationContext,
|
|
51
|
+
projectKey,
|
|
52
|
+
launchModeKey,
|
|
53
|
+
environmentKey,
|
|
54
|
+
entitlementsCacheLifetimeKey,
|
|
55
|
+
proxyUrl,
|
|
56
|
+
kidsMode
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@ReactMethod
|
|
61
|
+
override fun syncHistoricalData() {
|
|
62
|
+
qonversionSandwich.syncHistoricalData()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
override fun purchase(
|
|
67
|
+
productId: String,
|
|
68
|
+
quantity: Double,
|
|
69
|
+
contextKeys: ReadableArray?,
|
|
70
|
+
promoOffer: ReadableMap?,
|
|
71
|
+
offerId: String?,
|
|
72
|
+
applyOffer: Boolean,
|
|
73
|
+
oldProductId: String?,
|
|
74
|
+
updatePolicyKey: String?,
|
|
75
|
+
promise: Promise
|
|
76
|
+
) {
|
|
77
|
+
var contextKeysList: List<String>? = null
|
|
78
|
+
if (contextKeys != null) {
|
|
79
|
+
contextKeysList = EntitiesConverter.convertArrayToStringList(contextKeys)
|
|
80
|
+
}
|
|
81
|
+
qonversionSandwich.purchase(
|
|
82
|
+
productId,
|
|
83
|
+
offerId,
|
|
84
|
+
applyOffer,
|
|
85
|
+
oldProductId,
|
|
86
|
+
updatePolicyKey,
|
|
87
|
+
contextKeysList,
|
|
88
|
+
getResultListener(promise)
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@ReactMethod
|
|
93
|
+
override fun updatePurchase(
|
|
94
|
+
productId: String,
|
|
95
|
+
offerId: String?,
|
|
96
|
+
applyOffer: Boolean,
|
|
97
|
+
oldProductId: String?,
|
|
98
|
+
updatePolicyKey: String?,
|
|
99
|
+
promise: Promise
|
|
100
|
+
) {
|
|
101
|
+
purchase(
|
|
102
|
+
productId,
|
|
103
|
+
1.0,
|
|
104
|
+
null,
|
|
105
|
+
null,
|
|
106
|
+
offerId,
|
|
107
|
+
applyOffer,
|
|
108
|
+
oldProductId,
|
|
109
|
+
updatePolicyKey,
|
|
110
|
+
promise
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@ReactMethod
|
|
115
|
+
override fun setDefinedProperty(key: String, value: String) {
|
|
116
|
+
qonversionSandwich.setDefinedProperty(key, value)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@ReactMethod
|
|
120
|
+
override fun setCustomProperty(key: String, value: String) {
|
|
121
|
+
qonversionSandwich.setCustomProperty(key, value)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@ReactMethod
|
|
125
|
+
override fun userProperties(promise: Promise) {
|
|
126
|
+
qonversionSandwich.userProperties(getResultListener(promise))
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@ReactMethod
|
|
130
|
+
override fun addAttributionData(map: ReadableMap?, provider: String) {
|
|
131
|
+
try {
|
|
132
|
+
val attributesHashMap = EntitiesConverter.convertReadableMapToHashMap(
|
|
133
|
+
map!!
|
|
134
|
+
)
|
|
135
|
+
qonversionSandwich.addAttributionData(provider, attributesHashMap)
|
|
136
|
+
} catch (e: JSONException) {
|
|
137
|
+
e.printStackTrace()
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@ReactMethod
|
|
142
|
+
override fun checkEntitlements(promise: Promise) {
|
|
143
|
+
qonversionSandwich.checkEntitlements(getResultListener(promise))
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@ReactMethod
|
|
147
|
+
override fun products(promise: Promise) {
|
|
148
|
+
qonversionSandwich.products(getResultListener(promise))
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@ReactMethod
|
|
152
|
+
override fun offerings(promise: Promise) {
|
|
153
|
+
qonversionSandwich.offerings(getResultListener(promise))
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@ReactMethod
|
|
157
|
+
override fun checkTrialIntroEligibilityForProductIds(ids: ReadableArray?, promise: Promise) {
|
|
158
|
+
val idList = EntitiesConverter.convertArrayToStringList(
|
|
159
|
+
ids!!
|
|
160
|
+
)
|
|
161
|
+
qonversionSandwich.checkTrialIntroEligibility(idList, getResultListener(promise))
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
@ReactMethod
|
|
165
|
+
override fun restore(promise: Promise) {
|
|
166
|
+
qonversionSandwich.restore(getResultListener(promise))
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@ReactMethod
|
|
170
|
+
override fun syncPurchases() {
|
|
171
|
+
qonversionSandwich.syncPurchases()
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@ReactMethod
|
|
175
|
+
override fun identify(userId: String, promise: Promise) {
|
|
176
|
+
qonversionSandwich.identify(userId, getResultListener(promise))
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
@ReactMethod
|
|
180
|
+
override fun logout() {
|
|
181
|
+
qonversionSandwich.logout()
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@ReactMethod
|
|
185
|
+
override fun userInfo(promise: Promise) {
|
|
186
|
+
qonversionSandwich.userInfo(getResultListener(promise))
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@ReactMethod
|
|
190
|
+
override fun remoteConfig(contextKey: String?, promise: Promise) {
|
|
191
|
+
qonversionSandwich.remoteConfig(contextKey, getResultListener(promise))
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
@ReactMethod
|
|
195
|
+
override fun remoteConfigList(promise: Promise) {
|
|
196
|
+
qonversionSandwich.remoteConfigList(getResultListener(promise))
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@ReactMethod
|
|
200
|
+
override fun remoteConfigListForContextKeys(
|
|
201
|
+
contextKeys: ReadableArray?,
|
|
202
|
+
includeEmptyContextKey: Boolean,
|
|
203
|
+
promise: Promise
|
|
204
|
+
) {
|
|
205
|
+
val keysList = EntitiesConverter.convertArrayToStringList(
|
|
206
|
+
contextKeys!!
|
|
207
|
+
)
|
|
208
|
+
qonversionSandwich.remoteConfigList(
|
|
209
|
+
keysList,
|
|
210
|
+
includeEmptyContextKey,
|
|
211
|
+
getResultListener(promise)
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@ReactMethod
|
|
216
|
+
override fun attachUserToExperiment(experimentId: String, groupId: String, promise: Promise) {
|
|
217
|
+
qonversionSandwich.attachUserToExperiment(experimentId, groupId, getResultListener(promise))
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@ReactMethod
|
|
221
|
+
override fun detachUserFromExperiment(experimentId: String, promise: Promise) {
|
|
222
|
+
qonversionSandwich.detachUserFromExperiment(experimentId, getResultListener(promise))
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@ReactMethod
|
|
226
|
+
override fun attachUserToRemoteConfiguration(remoteConfigurationId: String, promise: Promise) {
|
|
227
|
+
qonversionSandwich.attachUserToRemoteConfiguration(
|
|
228
|
+
remoteConfigurationId,
|
|
229
|
+
getResultListener(promise)
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@ReactMethod
|
|
234
|
+
override fun detachUserFromRemoteConfiguration(remoteConfigurationId: String, promise: Promise) {
|
|
235
|
+
qonversionSandwich.detachUserFromRemoteConfiguration(
|
|
236
|
+
remoteConfigurationId,
|
|
237
|
+
getResultListener(promise)
|
|
238
|
+
)
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
@ReactMethod
|
|
242
|
+
override fun isFallbackFileAccessible(promise: Promise) {
|
|
243
|
+
qonversionSandwich.isFallbackFileAccessible(getResultListener(promise))
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
override fun syncStoreKit2Purchases() {
|
|
247
|
+
// iOS only
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
override fun collectAdvertisingId() {
|
|
251
|
+
// iOS only
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
override fun collectAppleSearchAdsAttribution() {
|
|
255
|
+
// iOS only
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
override fun presentCodeRedemptionSheet() {
|
|
259
|
+
// iOS only
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
override fun promoPurchase(productId: String?, promise: Promise?) {
|
|
263
|
+
// iOS only
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
override fun getPromotionalOffer(product: String?, discount: String?, promise: Promise?) {
|
|
267
|
+
// iOS only
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
override fun onEntitlementsUpdated(entitlements: BridgeData) {
|
|
271
|
+
val mappedEntitlements = EntitiesConverter.convertMapToWritableMap(entitlements)
|
|
272
|
+
emitOnEntitlementsUpdated(mappedEntitlements)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
companion object {
|
|
276
|
+
const val NAME = "RNQonversion"
|
|
277
|
+
}
|
|
278
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
package com.qonversion.reactnativesdk
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
|
+
import com.reactlibrary.QonversionModule
|
|
9
|
+
|
|
10
|
+
class QonversionPackage : BaseReactPackage() {
|
|
11
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
12
|
+
return if (name == NoCodesModule.NAME) {
|
|
13
|
+
NoCodesModule(reactContext)
|
|
14
|
+
} else if (name == QonversionModule.NAME) {
|
|
15
|
+
QonversionModule(reactContext)
|
|
16
|
+
} else {
|
|
17
|
+
null
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
22
|
+
return ReactModuleInfoProvider {
|
|
23
|
+
mapOf(
|
|
24
|
+
QonversionModule.NAME to ReactModuleInfo(
|
|
25
|
+
QonversionModule.NAME,
|
|
26
|
+
QonversionModule.NAME,
|
|
27
|
+
canOverrideExistingModule = false,
|
|
28
|
+
needsEagerInit = false,
|
|
29
|
+
isCxxModule = false,
|
|
30
|
+
isTurboModule = true
|
|
31
|
+
),
|
|
32
|
+
NoCodesModule.NAME to ReactModuleInfo(
|
|
33
|
+
NoCodesModule.NAME,
|
|
34
|
+
NoCodesModule.NAME,
|
|
35
|
+
canOverrideExistingModule = false,
|
|
36
|
+
needsEagerInit = false,
|
|
37
|
+
isCxxModule = false,
|
|
38
|
+
isTurboModule = true
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.qonversion.reactnativesdk
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Promise
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import io.qonversion.sandwich.ResultListener
|
|
6
|
+
import io.qonversion.sandwich.SandwichError
|
|
7
|
+
|
|
8
|
+
class Utils {
|
|
9
|
+
companion object {
|
|
10
|
+
@JvmStatic
|
|
11
|
+
fun getResultListener(promise: Promise): ResultListener {
|
|
12
|
+
return object : ResultListener {
|
|
13
|
+
override fun onSuccess(data: Map<String, *>) {
|
|
14
|
+
val payload: WritableMap = EntitiesConverter.convertMapToWritableMap(data)
|
|
15
|
+
promise.resolve(payload)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun onError(error: SandwichError) {
|
|
19
|
+
rejectWithError(error, promise)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@JvmStatic
|
|
25
|
+
@JvmOverloads
|
|
26
|
+
fun rejectWithError(sandwichError: SandwichError, promise: Promise, customErrorCode: String? = null) {
|
|
27
|
+
val errorMessage = sandwichError.description + "\n" + sandwichError.additionalMessage
|
|
28
|
+
val errorCode = customErrorCode ?: sandwichError.code
|
|
29
|
+
promise.reject(errorCode, errorMessage)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
package/ios/RNNoCodes.h
ADDED
package/ios/RNNoCodes.mm
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#import "RNNoCodes.h"
|
|
2
|
+
#import "qonversion_react_native_sdk-Swift.h"
|
|
3
|
+
|
|
4
|
+
@interface RNNoCodes () <NoCodesEventDelegate>
|
|
5
|
+
|
|
6
|
+
@property (nonatomic, strong) RNNoCodesImpl *impl;
|
|
7
|
+
|
|
8
|
+
@end
|
|
9
|
+
|
|
10
|
+
@implementation RNNoCodes RCT_EXPORT_MODULE()
|
|
11
|
+
|
|
12
|
+
- (instancetype)init {
|
|
13
|
+
self = [super init];
|
|
14
|
+
if (self) {
|
|
15
|
+
_impl = [[RNNoCodesImpl alloc] init];
|
|
16
|
+
[_impl setDelegate:self];
|
|
17
|
+
}
|
|
18
|
+
return self;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
- (void)initialize:(NSString *)projectKey
|
|
22
|
+
source:(NSString *)source
|
|
23
|
+
version:(NSString *)version {
|
|
24
|
+
[self.impl initializeWithProjectKey:projectKey source:source version:version];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
- (void)setScreenPresentationConfig:(NSDictionary *)configData
|
|
28
|
+
contextKey:(NSString *)contextKey
|
|
29
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
30
|
+
reject:(RCTPromiseRejectBlock)reject {
|
|
31
|
+
[self.impl setScreenPresentationConfig:configData contextKey:contextKey];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
- (void)showScreen:(NSString *)contextKey
|
|
35
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
36
|
+
reject:(RCTPromiseRejectBlock)reject {
|
|
37
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
38
|
+
[self.impl showScreenWithContextKey:contextKey];
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (void)close:(RCTPromiseResolveBlock)resolve
|
|
43
|
+
reject:(RCTPromiseRejectBlock)reject {
|
|
44
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
45
|
+
[self.impl close];
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
- (void)noCodesDidTriggerWithEvent:(NSString * _Nonnull)event payload:(NSDictionary<NSString *,id> * _Nullable)payload {
|
|
50
|
+
[self emitOnNoCodeEvent:@{@"name": event, @"payload": payload ?: [NSNull null]}];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#pragma mark - TurboModule
|
|
54
|
+
|
|
55
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
56
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
57
|
+
{
|
|
58
|
+
return std::make_shared<facebook::react::NativeNoCodesModuleSpecJSI>(params);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNNoCodesImpl.swift
|
|
3
|
+
// qonversion-react-native-sdk
|
|
4
|
+
//
|
|
5
|
+
// Created by Kamo Spertsyan on 15.08.2025.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import QonversionSandwich
|
|
10
|
+
import React
|
|
11
|
+
|
|
12
|
+
@objc
|
|
13
|
+
public protocol NoCodesEventDelegate {
|
|
14
|
+
func noCodesDidTrigger(event: String, payload: [String: Any]?)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class NoCodesEventHandler: NoCodesEventListener {
|
|
18
|
+
weak var delegate: NoCodesEventDelegate?
|
|
19
|
+
|
|
20
|
+
init(delegate: NoCodesEventDelegate?) {
|
|
21
|
+
self.delegate = delegate
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
func noCodesDidTrigger(event: String, payload: [String : Any]?) {
|
|
25
|
+
delegate?.noCodesDidTrigger(event: event, payload: payload)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@objc
|
|
30
|
+
public class RNNoCodesImpl: NSObject {
|
|
31
|
+
|
|
32
|
+
var noCodesSandwich: NoCodesSandwich?
|
|
33
|
+
var eventHandler: NoCodesEventHandler
|
|
34
|
+
|
|
35
|
+
@objc
|
|
36
|
+
public override init() {
|
|
37
|
+
eventHandler = NoCodesEventHandler(delegate: nil)
|
|
38
|
+
|
|
39
|
+
super.init()
|
|
40
|
+
|
|
41
|
+
noCodesSandwich = NoCodesSandwich(noCodesEventListener: eventHandler)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@objc
|
|
45
|
+
public func initialize(projectKey: String, source: String, version: String) {
|
|
46
|
+
// Ignore source and version, because it's taken from the Qonversion SDK.
|
|
47
|
+
noCodesSandwich?.initialize(projectKey: projectKey)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@MainActor @objc
|
|
51
|
+
public func setScreenPresentationConfig(_ configData: [String: Any], contextKey: String) {
|
|
52
|
+
noCodesSandwich?.setScreenPresentationConfig(configData, forContextKey: contextKey)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@MainActor @objc
|
|
56
|
+
public func showScreen(contextKey: String) {
|
|
57
|
+
noCodesSandwich?.showScreen(contextKey)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@MainActor @objc
|
|
61
|
+
public func close() {
|
|
62
|
+
noCodesSandwich?.close()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@objc
|
|
66
|
+
public func setDelegate(_ delegate: NoCodesEventDelegate?) {
|
|
67
|
+
eventHandler.delegate = delegate
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
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
|