diff --git a/android/build.gradle b/android/build.gradle index 7dc31b51..016d0340 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -84,7 +84,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation 'com.github.jeziellago:compose-markdown:0.3.0' - compileOnly "com.namiml:sdk-amazon:3.1.32" + compileOnly "com.namiml:sdk-amazon:3.2.0-beta.01" implementation 'com.facebook.react:react-native:+' // From node_modules coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.5" diff --git a/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt b/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt index da85bbaa..298c3602 100644 --- a/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt +++ b/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt @@ -106,7 +106,7 @@ class NamiBridgeModule(reactContext: ReactApplicationContext) : } else { Arguments.createArray() } - val settingsList = mutableListOf("extendedClientInfo:react-native:3.1.34") + val settingsList = mutableListOf("extendedClientInfo:react-native:3.2.0-beta.01") namiCommandsReact?.toArrayList()?.filterIsInstance()?.let { commandsFromReact -> settingsList.addAll(commandsFromReact) } diff --git a/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt b/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt index 361596fe..8ebbff62 100644 --- a/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt +++ b/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt @@ -220,6 +220,11 @@ class NamiPaywallManagerBridgeModule(reactContext: ReactApplicationContext) : } } + @ReactMethod + fun setProductDetails(productDetails: String, allowOffers: Boolean) { + NamiPaywallManager.setProductDetails(productDetails, allowOffers = false) + } + @ReactMethod fun addListener(eventName: String?) { } diff --git a/examples/Basic/android/app/build.gradle b/examples/Basic/android/app/build.gradle index eeb4c919..4c5ad0a3 100644 --- a/examples/Basic/android/app/build.gradle +++ b/examples/Basic/android/app/build.gradle @@ -225,7 +225,7 @@ dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" // From node_modules implementation 'com.github.jeziellago:compose-markdown:0.3.0' - implementation "com.namiml:sdk-android:3.1.32" + implementation "com.namiml:sdk-android:3.2.0-beta.01" implementation project(':react-native-screens') diff --git a/examples/TestNamiTV/android/app/build.gradle b/examples/TestNamiTV/android/app/build.gradle index 935ae1e8..acd9a629 100644 --- a/examples/TestNamiTV/android/app/build.gradle +++ b/examples/TestNamiTV/android/app/build.gradle @@ -227,8 +227,8 @@ dependencies { implementation "com.facebook.react:react-native:+" // From node_modules implementation 'com.github.jeziellago:compose-markdown:0.3.0' - amazonImplementation "com.namiml:sdk-amazon:3.1.32" - playImplementation "com.namiml:sdk-android:3.1.32" + amazonImplementation "com.namiml:sdk-amazon:3.2.0-beta.01" + playImplementation "com.namiml:sdk-android:3.2.0-beta.01" if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; diff --git a/examples/TestNamiTV/index.js b/examples/TestNamiTV/index.js index 8c6c00c3..10120d9f 100644 --- a/examples/TestNamiTV/index.js +++ b/examples/TestNamiTV/index.js @@ -2,21 +2,32 @@ * @format */ import React, { useEffect, useState } from 'react'; +import { Platform } from 'react-native'; import { View } from 'react-native'; import { AppRegistry } from 'react-native'; -import { Nami } from 'react-native-nami-sdk'; +import { Nami, NamiPaywallManager } from 'react-native-nami-sdk'; import App from './App'; import { name as appName } from './app.json'; import { getConfigObject } from './config'; +import amazonSideloadProducts from './nami_amazon_product_details.json'; const configDict = getConfigObject(); console.log('configDict', configDict); +export const getAmazonProducts = () => { + return JSON.stringify(amazonSideloadProducts); +}; + const Root = () => { const [isConfigurationComplete, setIsConfigurationComplete] = useState(); useEffect(() => { Nami.configure(configDict, (resultObject) => { setIsConfigurationComplete(true); + + if (Platform.constants.Manufacturer === 'Amazon') { + NamiPaywallManager.setProductDetails(getAmazonProducts(), false); + } + }); // eslint-disable-next-line @typescript-eslint/no-empty-function return () => {}; diff --git a/examples/TestNamiTV/nami_amazon_product_details.json b/examples/TestNamiTV/nami_amazon_product_details.json new file mode 100644 index 00000000..327a21da --- /dev/null +++ b/examples/TestNamiTV/nami_amazon_product_details.json @@ -0,0 +1,101 @@ +{ + "products": [ + { + "originalJson": { + "sku": "poc_premium_annual_testnami_stg", + "productType": "SUBSCRIPTION", + "description": "With Nami+, stay connected with premium content.", + "price": "$99.99", + "smallIconUrl": "", + "title": "POC Premium Annual", + "coinsRewardsAmount": 0, + "subscriptionPeriod": "Annual", + "freeTrialPeriod": "7 days", + "promotions": [ + { + "promotionType": "Introductory", + "promotionPlans": [ + { + "promotionPricePeriod": "SemiAnnual", + "promotionPrice": "$39.99", + "promotionPriceCycles": 1 + } + ] + } + ] + }, + "originalPrice": "$99.99", + "iconUrl": "", + "title": "POC Premium Annual", + "localizedPrice": "$99.99", + "price": "$99.99", + "type": "subs", + "description": "With Nami+, stay connected with premium content.", + "productId": "poc_premium_annual_testnami_stg", + "currency": "USD" + }, + { + "originalJson": { + "sku": "poc_premium_monthly_testnami_stg", + "productType": "SUBSCRIPTION", + "description": "With Nami+, stay connected with premium content.", + "price": "$14.99", + "smallIconUrl": "", + "title": "POC Premium Monthly", + "coinsRewardsAmount": 0, + "subscriptionPeriod": "Monthly" + }, + "originalPrice": "$14.99", + "iconUrl": "", + "title": "POC Premium Monthly", + "localizedPrice": "$14.99", + "price": "$14.99", + "type": "subs", + "description": "With Nami+, stay connected with premium content.", + "productId": "poc_premium_monthly_testnami_stg", + "currency": "USD" + }, + { + "originalJson": { + "sku": "poc_base_annual_testnami_stg", + "productType": "SUBSCRIPTION", + "description": "With Nami+, stay connected with premium content.", + "price": "$49.99", + "smallIconUrl": "", + "title": "POC Base Annual", + "coinsRewardsAmount": 0, + "subscriptionPeriod": "Annual" + }, + "originalPrice": "$49.99", + "iconUrl": "", + "title": "POC Base Annual", + "localizedPrice": "$49.99", + "price": "$49.99", + "type": "subs", + "description": "With Nami+, stay connected with premium content.", + "productId": "poc_base_annual_testnami_stg", + "currency": "USD" + }, + { + "originalJson": { + "sku": "poc_base_monthly_testnami_stg", + "title": "POC Base Monthly", + "productType": "SUBSCRIPTION", + "description": "With Nami+, stay connected with premium content.", + "price": "$6.99", + "smallIconUrl": "", + "coinsRewardsAmount": 0, + "subscriptionPeriod": "Monthly" + }, + "originalPrice": "$6.99", + "iconUrl": "", + "title": "POC Base Monthly", + "localizedPrice": "$6.99", + "price": "$6.99", + "type": "subs", + "description": "With Nami+, stay connected with premium content.", + "productId": "poc_base_monthly_testnami_stg", + "currency": "USD" + } + ] + } \ No newline at end of file diff --git a/ios/Nami.m b/ios/Nami.m index 65c72e4b..9395f29c 100644 --- a/ios/Nami.m +++ b/ios/Nami.m @@ -50,7 +50,7 @@ @implementation NamiBridge (RCTExternModule) } // Start commands with header iformation for Nami to let them know this is a React client. - NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.1.34"]]; + NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.2.0-beta.1"]]; // Add additional namiCommands app may have sent in. NSObject *appCommandStrings = configDict[@"namiCommands"]; diff --git a/ios/NamiPaywallManagerBridge.m b/ios/NamiPaywallManagerBridge.m index 9b2c5d2d..2c06d92f 100644 --- a/ios/NamiPaywallManagerBridge.m +++ b/ios/NamiPaywallManagerBridge.m @@ -39,6 +39,9 @@ @interface RCT_EXTERN_MODULE(RNNamiPaywallManager, NSObject) RCT_EXTERN_METHOD(buySkuCancel) +RCT_EXTERN_METHOD(setProductDetails:(NSString *)productDetails allowOffers:(BOOL *)) + + + (BOOL)requiresMainQueueSetup { return YES; } diff --git a/ios/NamiPaywallManagerBridge.swift b/ios/NamiPaywallManagerBridge.swift index bc971e4d..0579d676 100644 --- a/ios/NamiPaywallManagerBridge.swift +++ b/ios/NamiPaywallManagerBridge.swift @@ -152,4 +152,9 @@ class RNNamiPaywallManager: RCTEventEmitter { resolve(isPaywallOpen) } } + + @objc(setProductDetails:allowOffers:) + func setProductDetails(productDetails: String, allowOffers: Bool) { + // Do nothing on Apple + } } diff --git a/package.json b/package.json index 654cc7fa..be1850ed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-nami-sdk", - "version": "3.1.34", + "version": "3.2.0-beta.1", "description": "React Native Module for Nami - Easy subscriptions & in-app purchases, with powerful built-in paywalls and A/B testing.", "main": "index.ts", "types": "index.d.ts", diff --git a/react-native-nami-sdk.podspec b/react-native-nami-sdk.podspec index 1ae5c99b..ceb83f57 100644 --- a/react-native-nami-sdk.podspec +++ b/react-native-nami-sdk.podspec @@ -20,7 +20,7 @@ Pod::Spec.new do |s| s.source_files = "ios/**/*.{h,m,swift}" s.requires_arc = true - s.dependency 'Nami', '3.1.34' + s.dependency 'Nami', '3.2.0-beta.01' s.dependency 'React' end diff --git a/src/NamiPaywallManager.d.ts b/src/NamiPaywallManager.d.ts index 76ab4072..55cf89f8 100644 --- a/src/NamiPaywallManager.d.ts +++ b/src/NamiPaywallManager.d.ts @@ -26,6 +26,7 @@ export const NamiPaywallManager: { buySkuCancel: () => void; isHidden: () => Promise; isPaywallOpen: () => Promise; + setProductDetails: (productDetails: string, allowOffers: boolean) => void; }; export type NamiPurchaseSuccessApple = { diff --git a/src/NamiPaywallManager.ts b/src/NamiPaywallManager.ts index 3fe1e3d3..7cb7461d 100644 --- a/src/NamiPaywallManager.ts +++ b/src/NamiPaywallManager.ts @@ -49,6 +49,7 @@ export interface INamiPaywallManager { hide: () => void; isHidden: () => Promise; isPaywallOpen: () => Promise; + setProductDetails: (productDetails: string, allowOffers: boolean) => void; } const { NamiPaywallManagerBridge, RNNamiPaywallManager } = NativeModules; @@ -160,4 +161,13 @@ export const NamiPaywallManager: INamiPaywallManager = { isPaywallOpen: () => { return RNNamiPaywallManager.isPaywallOpen(); }, + setProductDetails: ( + productDetails: string, + allowOffers: boolean + ) => { + RNNamiPaywallManager.setProductDetails( + productDetails, + allowOffers, + ); + }, };