react-native-nami-sdk 3.0.23 → 3.0.24

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.
@@ -254,7 +254,7 @@ jobs:
254
254
  pip3 install PyJWT
255
255
  echo "1.0" > $RUNNER_TEMP/.current_version
256
256
  export CURRENT_VERSION=`cat $RUNNER_TEMP/.current_version`
257
- python3 get_next_build.py com.namiml.stg.testreactnative --prerelease --platform=TV_OS > $RUNNER_TEMP/.next_build_number
257
+ python3 get_next_build.py com.namiml.app.testreactnative --prerelease --platform=TV_OS > $RUNNER_TEMP/.next_build_number
258
258
  working-directory: appstoreconnect-build-tools
259
259
  env:
260
260
  APPSTORE_API_KEY_ID: "${{ secrets.APPSTORE_API_KEY_ID }}"
@@ -115,7 +115,7 @@ class NamiBridgeModule(reactContext: ReactApplicationContext) :
115
115
  } else {
116
116
  Arguments.createArray()
117
117
  }
118
- val settingsList = mutableListOf("extendedClientInfo:react-native:3.0.23")
118
+ val settingsList = mutableListOf("extendedClientInfo:react-native:3.0.24")
119
119
  namiCommandsReact?.toArrayList()?.filterIsInstance<String>()?.let { commandsFromReact ->
120
120
  settingsList.addAll(commandsFromReact)
121
121
  }
@@ -29,6 +29,8 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
29
29
  const val CAMPAIGN_TYPE = "campaignType"
30
30
  const val CAMPAIGN_URL = "campaignUrl"
31
31
  const val PAYWALL_NAME = "paywallName"
32
+ const val COMPONENT_CHANGE_ID = "componentChangeId"
33
+ const val COMPONENT_CHANGE_NAME = "componentChangeName"
32
34
  const val SEGMENT_ID = "segmentId"
33
35
  const val EXTERNAL_SEGMENT_ID = "externalSegmentId"
34
36
  const val DEEP_LINK_URL = "deeplinkUrl"
@@ -189,6 +191,8 @@ class NamiCampaignManagerBridgeModule(reactContext: ReactApplicationContext) :
189
191
  putString(CAMPAIGN_TYPE, campaignType ?: "")
190
192
  putString(CAMPAIGN_URL, campaignUrl ?: "")
191
193
  putString(PAYWALL_NAME, paywallName ?: "")
194
+ putString(COMPONENT_CHANGE_ID, "")
195
+ putString(COMPONENT_CHANGE_NAME, "")
192
196
  putString(SEGMENT_ID, segmentId ?: "")
193
197
  putString(EXTERNAL_SEGMENT_ID, externalSegmentId ?: "")
194
198
  putString(DEEP_LINK_URL, deeplinkUrl ?: "")
@@ -79,6 +79,8 @@ fun NamiSKU.toSkuDict(): WritableMap {
79
79
  productDict.putString("skuId", this.skuId)
80
80
  productDict.putString("id", this.id)
81
81
  productDict.putString("type", this.type.toString())
82
+ productDict.putString("promoId","")
83
+ productDict.putString("promoToken","")
82
84
 
83
85
  return productDict
84
86
  }
package/ios/Nami.m CHANGED
@@ -52,7 +52,7 @@ RCT_EXPORT_METHOD(configure: (NSDictionary *)configDict completion: (RCTResponse
52
52
  }
53
53
 
54
54
  // Start commands with header iformation for Nami to let them know this is a React client.
55
- NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.0.23"]];
55
+ NSMutableArray *namiCommandStrings = [NSMutableArray arrayWithArray:@[@"extendedClientInfo:react-native:3.0.24"]];
56
56
 
57
57
  // Add additional namiCommands app may have sent in.
58
58
  NSObject *appCommandStrings = configDict[@"namiCommands"];
@@ -43,23 +43,10 @@ class RNNamiCampaignManager: RCTEventEmitter {
43
43
  }
44
44
 
45
45
  func handlePaywallAction(
46
- campaignId: String?,
47
- campaignName: String?,
48
- campaignType: String?,
49
- campaignLabel: String?,
50
- campaignUrl: String?,
51
- paywallId: String?,
52
- paywallName: String?,
53
- segmentId: String?,
54
- externalSegmentId: String?,
55
- action: NamiApple.NamiPaywallAction,
56
- sku: NamiApple.NamiSKU?,
57
- purchaseError: Error?,
58
- purchases: [NamiApple.NamiPurchase],
59
- deeplinkUrl: String?
46
+ paywallEvent: NamiPaywallEvent
60
47
  ) {
61
- let actionString: String
62
- switch action {
48
+ var actionString: String
49
+ switch paywallEvent.action {
63
50
  case .show_paywall:
64
51
  actionString = "SHOW_PAYWALL"
65
52
  case .close_paywall:
@@ -86,29 +73,36 @@ class RNNamiCampaignManager: RCTEventEmitter {
86
73
  actionString = "PURCHASE_UNKNOWN"
87
74
  case .deeplink:
88
75
  actionString = "DEEPLINK"
89
- @unknown default:
90
- actionString = "PURCHASE_UNKNOWN"
76
+ case .toggle_change:
77
+ actionString = "TOGGLE_CHANGE"
78
+ case .page_change:
79
+ actionString = "PAGE_CHANGE"
80
+ case .slide_change:
81
+ actionString = "SLIDE_CHANGE"
82
+ default:
83
+ actionString = "UNKNOWN"
91
84
  }
92
- let skuId = sku?.skuId
93
- let errorSting = purchaseError?.localizedDescription
85
+ let errorSting = paywallEvent.purchaseError?.localizedDescription
94
86
 
95
- let dictionaries = purchases.map { purchase in RNNamiPurchaseManager.purchaseToPurchaseDict(purchase) }
87
+ let dictionaries = paywallEvent.purchases.map { purchase in RNNamiPurchaseManager.purchaseToPurchaseDict(purchase) }
96
88
 
97
89
  let payload: [String: Any?] = [
98
- "campaignId": campaignId,
99
- "campaignName": campaignName,
100
- "campaignType": campaignType,
101
- "campaignLabel": campaignLabel,
102
- "campaignUrl": campaignUrl,
103
- "paywallId": paywallId,
104
- "paywallName": paywallName,
105
- "segmentId": segmentId,
106
- "externalSegmentId": externalSegmentId,
90
+ "campaignId": paywallEvent.campaignId,
91
+ "campaignName": paywallEvent.campaignName,
92
+ "campaignType": paywallEvent.campaignType,
93
+ "campaignLabel": paywallEvent.campaignLabel,
94
+ "campaignUrl": paywallEvent.campaignUrl,
95
+ "paywallId": paywallEvent.paywallId,
96
+ "paywallName": paywallEvent.paywallName,
97
+ "segmentId": paywallEvent.segmentId,
98
+ "externalSegmentId": paywallEvent.externalSegmentId,
107
99
  "action": actionString,
108
- "skuId": skuId,
100
+ "skuId": paywallEvent.sku?.id,
109
101
  "purchaseError": errorSting,
110
102
  "purchases": dictionaries,
111
- "deeplinkUrl": deeplinkUrl,
103
+ "deeplinkUrl": paywallEvent.deeplinkUrl,
104
+ "componentChangeId": paywallEvent.componentChange?.id,
105
+ "componentChangeName": paywallEvent.componentChange?.name,
112
106
  ]
113
107
 
114
108
  RNNamiCampaignManager.shared?.sendEvent(withName: "ResultCampaign", body: payload)
@@ -156,8 +150,8 @@ class RNNamiCampaignManager: RCTEventEmitter {
156
150
  error: error
157
151
  )
158
152
  },
159
- paywallActionHandler: { campaignId, campaignName, campaignType, campaignLabel, campaignUrl, paywallId, paywallName, segmentId, externalSegmentId, _, action, sku, purchaseError, purchases, deeplinkUrl in
160
- self.handlePaywallAction(campaignId: campaignId, campaignName: campaignName, campaignType: campaignType, campaignLabel: campaignLabel, campaignUrl: campaignUrl, paywallId: paywallId, paywallName: paywallName, segmentId: segmentId, externalSegmentId: externalSegmentId, action: action, sku: sku, purchaseError: purchaseError, purchases: purchases, deeplinkUrl: deeplinkUrl)
153
+ paywallActionHandler: { paywallEvent in
154
+ self.handlePaywallAction(paywallEvent: paywallEvent)
161
155
  })
162
156
  }
163
157
  } else if let label = label {
@@ -170,8 +164,8 @@ class RNNamiCampaignManager: RCTEventEmitter {
170
164
  error: error
171
165
  )
172
166
  },
173
- paywallActionHandler: { campaignId, campaignName, campaignType, campaignLabel, campaignUrl, paywallId, paywallName, segmentId, externalSegmentId, _, action, sku, purchaseError, purchases, deeplinkUrl in
174
- self.handlePaywallAction(campaignId: campaignId, campaignName: campaignName, campaignType: campaignType, campaignLabel: campaignLabel, campaignUrl: campaignUrl, paywallId: paywallId, paywallName: paywallName, segmentId: segmentId, externalSegmentId: externalSegmentId, action: action, sku: sku, purchaseError: purchaseError, purchases: purchases, deeplinkUrl: deeplinkUrl)
167
+ paywallActionHandler: { paywallEvent in
168
+ self.handlePaywallAction(paywallEvent: paywallEvent)
175
169
  })
176
170
  }
177
171
  } else {
@@ -185,8 +179,8 @@ class RNNamiCampaignManager: RCTEventEmitter {
185
179
  error: error
186
180
  )
187
181
  },
188
- paywallActionHandler: { campaignId, campaignName, campaignType, campaignLabel, campaignUrl, paywallId, paywallName, segmentId, externalSegmentId, _, action, sku, purchaseError, purchases, deeplinkUrl in
189
- self.handlePaywallAction(campaignId: campaignId, campaignName: campaignName, campaignType: campaignType, campaignLabel: campaignLabel, campaignUrl: campaignUrl, paywallId: paywallId, paywallName: paywallName, segmentId: segmentId, externalSegmentId: externalSegmentId, action: action, sku: sku, purchaseError: purchaseError, purchases: purchases, deeplinkUrl: deeplinkUrl)
182
+ paywallActionHandler: { paywallEvent in
183
+ self.handlePaywallAction(paywallEvent: paywallEvent)
190
184
  })
191
185
  }
192
186
  }
@@ -41,7 +41,7 @@ class RNNamiPaywallManager: RCTEventEmitter {
41
41
  namiSkuType = .unknown
42
42
  }
43
43
 
44
- let namiSku = NamiSKU(namiId: namiId, storeId: storeId, skuType: namiSkuType, product: nil)
44
+ let namiSku = NamiSKU(namiId: namiId, storeId: storeId, skuType: namiSkuType)
45
45
 
46
46
  do {
47
47
  let dateFormatter = DateFormatter()
@@ -26,8 +26,8 @@ class RNNamiPurchaseManager: RCTEventEmitter {
26
26
  let productDict: [String: Any?] = [
27
27
  "localizedTitle": product.localizedTitle,
28
28
  "localizedDescription": product.localizedDescription,
29
- "localizedPrice": product.localizedPrice,
30
- "localizedMultipliedPrice": product.localizedMultipliedPrice,
29
+ "localizedPrice": product.price,
30
+ "localizedMultipliedPrice": "",
31
31
  "price": product.price.stringValue,
32
32
  "priceLanguage": product.priceLocale.languageCode,
33
33
  "priceCurrency": product.priceLocale.currencyCode,
@@ -37,7 +37,7 @@ class RNNamiPurchaseManager: RCTEventEmitter {
37
37
 
38
38
  static func skuToSKUDict(_ sku: NamiSKU) -> NSDictionary {
39
39
  var productDict: NSDictionary?
40
- if let product = sku.product {
40
+ if let product = sku.product as? SKProduct {
41
41
  productDict = productToDict(product)
42
42
  }
43
43
 
@@ -58,6 +58,8 @@ class RNNamiPurchaseManager: RCTEventEmitter {
58
58
  "skuId": sku.skuId,
59
59
  "type": typeString,
60
60
  "appleProduct": productDict,
61
+ "promoId": sku.promoId,
62
+ "promoToken": "",
61
63
  ]
62
64
 
63
65
  return NSDictionary(dictionary: skuDict.compactMapValues { $0 })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nami-sdk",
3
- "version": "3.0.23",
3
+ "version": "3.0.24",
4
4
  "description": "React Native Module for Nami - Easy subscriptions & in-app purchases, with powerful built-in paywalls and A/B testing.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
20
20
  s.source_files = "ios/**/*.{h,m,swift}"
21
21
  s.requires_arc = true
22
22
 
23
- s.dependency 'Nami', '3.0.25'
23
+ s.dependency 'Nami', '3.1.1'
24
24
  s.dependency 'React'
25
25
 
26
26
  end
@@ -1,6 +1,7 @@
1
1
  import { EmitterSubscription } from "react-native";
2
2
  import { NamiPurchase } from "./NamiPurchaseManager";
3
3
  import { NamiPaywallAction } from "./NamiPaywallManager";
4
+ import { NamiSKU } from "./types";
4
5
 
5
6
  export const NamiCampaignManager: {
6
7
  allCampaigns: () => Promise<Array<NamiCampaign>>;
@@ -23,6 +24,8 @@ export const NamiCampaignManager: {
23
24
  externalSegmentId?: string,
24
25
  deeplinkUrl?: string,
25
26
  skuId?: string,
27
+ componentChangeId?: string,
28
+ componentChangeName?: string,
26
29
  purchaseError?: string,
27
30
  purchases?: NamiPurchase[]
28
31
  ) => void
@@ -72,3 +75,26 @@ export type PaywallLaunchContext = {
72
75
  [key: string]: string;
73
76
  };
74
77
  };
78
+
79
+ export type NamiPaywallEvent = {
80
+ action: NamiPaywallAction;
81
+ campaignId?: string;
82
+ campaignName?: string;
83
+ campaignType?: string;
84
+ campaignLabel?: string;
85
+ campaignUrl?: string;
86
+ paywallId?: string;
87
+ paywallName?: string;
88
+ componentChange?: NamiPaywallComponentChange;
89
+ segmentId?: string;
90
+ externalSegmentId?: string;
91
+ deeplinkUrl?: string;
92
+ sku?: NamiSKU;
93
+ purchaseError?: string;
94
+ purchases?: NamiPurchase[];
95
+ };
96
+
97
+ export type NamiPaywallComponentChange = {
98
+ id?: string;
99
+ name?: string;
100
+ };
@@ -19,15 +19,17 @@ export const NamiCampaignManager = {
19
19
  action,
20
20
  campaignId,
21
21
  paywallId,
22
- campaignLabel,
23
22
  campaignName,
24
23
  campaignType,
24
+ campaignLabel,
25
25
  campaignUrl,
26
26
  paywallName,
27
27
  segmentId,
28
28
  externalSegmentId,
29
29
  deeplinkUrl,
30
30
  skuId,
31
+ componentChangeId,
32
+ componentChangeName,
31
33
  purchaseError,
32
34
  purchases
33
35
  } = body;
@@ -35,15 +37,17 @@ export const NamiCampaignManager = {
35
37
  action,
36
38
  campaignId,
37
39
  paywallId,
38
- campaignLabel,
39
40
  campaignName,
40
41
  campaignType,
42
+ campaignLabel,
41
43
  campaignUrl,
42
44
  paywallName,
43
45
  segmentId,
44
46
  externalSegmentId,
45
47
  deeplinkUrl,
46
48
  skuId,
49
+ componentChangeId,
50
+ componentChangeName,
47
51
  purchaseError,
48
52
  purchases,
49
53
  );
@@ -66,4 +66,8 @@ export enum NamiPaywallAction {
66
66
  PURCHASE_UNKNOWN = "PURCHASE_UNKNOWN",
67
67
  PURCHASE_DEFERRED = "PURCHASE_DEFERRED",
68
68
  DEEPLINK = "DEEPLINK",
69
+ TOGGLE_CHANGE = "TOGGLE_CHANGE",
70
+ PAGE_CHANGE = "PAGE_CHANGE",
71
+ SLIDE_CHANGE = "SLIDE_CHANGE",
72
+ UNKNOWN = "UNKNOWN"
69
73
  }
package/src/types.ts CHANGED
@@ -6,6 +6,8 @@ export type NamiSKU = {
6
6
  googleProduct?: GoogleProduct;
7
7
  amazonProduct?: AmazonProduct;
8
8
  type: NamiSKUType;
9
+ promoId?: string;
10
+ promoToken?: string;
9
11
  };
10
12
 
11
13
  export enum NamiPurchaseState {