react-native-nami-sdk 2.0.5 → 3.0.9

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.
Files changed (56) hide show
  1. package/.github/workflows/app_stg.yaml +203 -0
  2. package/.pre-commit-config.yaml +1 -1
  3. package/android/build.gradle +24 -13
  4. package/android/gradle/wrapper/gradle-wrapper.properties +5 -1
  5. package/android/src/main/java/com/nami/reactlibrary/NamiBridgeModule.kt +7 -51
  6. package/android/src/main/java/com/nami/reactlibrary/NamiBridgePackage.java +1 -0
  7. package/android/src/main/java/com/nami/reactlibrary/NamiCampaignManagerBridge.kt +136 -0
  8. package/android/src/main/java/com/nami/reactlibrary/NamiCustomerManagerBridge.kt +97 -18
  9. package/android/src/main/java/com/nami/reactlibrary/NamiEmitter.kt +24 -24
  10. package/android/src/main/java/com/nami/reactlibrary/NamiEntitlementManagerBridgeModule.kt +30 -129
  11. package/android/src/main/java/com/nami/reactlibrary/NamiPaywallManagerBridgeModule.kt +133 -149
  12. package/android/src/main/java/com/nami/reactlibrary/NamiPurchaseManagerBridge.kt +36 -38
  13. package/android/src/main/java/com/nami/reactlibrary/NamiUtil.kt +50 -180
  14. package/build-utils/get_version_code.py +140 -0
  15. package/index.d.ts +20 -0
  16. package/index.js +7 -6
  17. package/ios/Nami.m +9 -63
  18. package/ios/NamiBridgeUtil.h +4 -6
  19. package/ios/NamiBridgeUtil.m +16 -78
  20. package/ios/NamiCampaignManagerBridge.m +26 -0
  21. package/ios/NamiCampaignManagerBridge.swift +112 -0
  22. package/ios/NamiCustomerManager.m +22 -23
  23. package/ios/NamiCustomerManager.swift +132 -0
  24. package/ios/NamiEmitter.m +55 -65
  25. package/ios/NamiEntitlementManagerBridge.m +7 -107
  26. package/ios/NamiEntitlementManagerBridge.swift +74 -0
  27. package/ios/NamiMLManagerBridge.m +2 -2
  28. package/ios/NamiPaywallManagerBridge.m +22 -94
  29. package/ios/NamiPaywallManagerBridge.swift +93 -0
  30. package/ios/NamiPurchaseManagerBridge.m +38 -69
  31. package/ios/NamiPurchaseManagerBridge.swift +174 -0
  32. package/ios/Podfile +2 -2
  33. package/ios/RNNami-Bridging-Header.h +5 -0
  34. package/ios/RNNami.h +0 -1
  35. package/ios/RNNami.m +1 -1
  36. package/ios/RNNami.xcodeproj/project.pbxproj +83 -11
  37. package/ios/RNNami.xcodeproj/xcshareddata/xcschemes/RNNami.xcscheme +67 -0
  38. package/package.json +1 -1
  39. package/react-native-nami-sdk.podspec +3 -3
  40. package/src/Nami.d.ts +112 -0
  41. package/src/Nami.js +10 -0
  42. package/src/NamiCampaignManager.d.ts +57 -0
  43. package/src/NamiCampaignManager.js +54 -0
  44. package/src/NamiCustomerManager.d.ts +41 -0
  45. package/src/NamiCustomerManager.js +43 -0
  46. package/src/NamiEntitlementManager.d.ts +24 -0
  47. package/src/NamiEntitlementManager.js +23 -0
  48. package/src/NamiMLManager.d.ts +5 -0
  49. package/src/NamiMLManager.js +7 -0
  50. package/src/NamiPaywallManager.d.ts +82 -0
  51. package/src/NamiPaywallManager.js +37 -0
  52. package/src/NamiPurchaseManager.d.ts +57 -0
  53. package/src/NamiPurchaseManager.js +37 -0
  54. package/src/types.ts +36 -0
  55. package/android/src/main/java/com/nami/reactlibrary/NamiAnalyticsEmitter.kt +0 -121
  56. package/ios/NamiAnalyticsEmitter.m +0 -146
@@ -1,121 +0,0 @@
1
- package com.nami.reactlibrary
2
-
3
- import com.facebook.react.bridge.ReactApplicationContext
4
- import com.facebook.react.bridge.ReactContextBaseJavaModule
5
-
6
- class NamiAnalyticsEmitter(reactContext: ReactApplicationContext) :
7
- ReactContextBaseJavaModule(reactContext) {
8
- // fun NamiEmitter(reactContext: ReactApplicationContext?) {
9
- // Log.e("ReactNative", "In Emitter Initialize(reactContext)")
10
- // NamiPaywallManager.registerApplicationPaywallProvider { context, paywallData, products, developerPaywallId ->
11
- //
12
- // Log.e("ReactNativeAndroidDridge", "products from regsiterApplicationPaywallProvider callback are " + products)
13
- //
14
- // val productList: List<NamiSKU> = products ?: ArrayList<NamiSKU>()
15
- // emitPaywallRaise(context, paywallData, productList, developerPaywallId)
16
- // }
17
- // NamiPaywallManager.registerApplicationSignInProvider { context, paywallData, developerPaywallId ->
18
- // currentActivity?.let {
19
- // emitSignInActivated(WeakReference(it), paywallData, developerPaywallId)
20
- // }
21
- // }
22
- // }
23
-
24
- override fun onCatalystInstanceDestroy() {
25
- }
26
-
27
- override fun getName(): String {
28
- return "NamiAnaltyicsEmitter"
29
- }
30
-
31
- override fun canOverrideExistingModule(): Boolean {
32
- return false
33
- }
34
-
35
- override fun initialize() {
36
-
37
- // [NamiAnalyticsSupport registerAnalyticsHandlerWithHandler: ^(NamiAnalyticsActionType actionType , NSDictionary<NSString *,id> * _Nonnull anaytlicsDict) {
38
- // [self sendAnalyticsEventForAction:actionType anayticsItems:anaytlicsDict];
39
- // }];
40
- }
41
-
42
- // public fun emitSignInActivated(activity: java.lang.ref.WeakReference<android.app.Activity>, paywallData: NamiPaywall, paywallDeveloperID: String?) {
43
- //// if (hasNamiEmitterListeners) {
44
- //// // Pass along paywall ID and paywall metadata for use in sign-in provider.
45
- //// [self sendEventWithName:@"SignInActivate" body:@{ @"developerPaywallID": developerPaywallID,
46
- //// @"paywallMetadata": paywallMetadata.namiPaywallInfoDict, }];
47
- //// }
48
- // val map = Arguments.createMap()
49
- // map.putString("developerPaywallID", paywallDeveloperID)
50
- // map.putString("paywallMetadata", "Need TO Map NamiPaywall Object")
51
- // try {
52
- // reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
53
- // .emit("SignInActivate", map)
54
- // } catch (e: Exception) {
55
- // Log.e("ReactNative", "Caught Exception: " + e.message)
56
- // }
57
- // }
58
-
59
- // Future work to convert this ObjC code:
60
- //
61
- // - (NSDictionary *) productDictIfProductPresentInAnalyticsItems:(NSDictionary *)anayticsItems forKey:(NSString *)key {
62
- // NamiSKU *product = (NamiSKU *)anayticsItems[key];
63
- // if (product != NULL && [product isKindOfClass:[NamiSKU class]] ) {
64
- // return [NamiBridgeUtil skuToSKUDict:product];
65
- // } else {
66
- // return NULL;
67
- // }
68
- // }
69
- //
70
- //
71
- //
72
- // - (NSDictionary <NSString *, id> *) sanitizeAnalyticsItems:(NSDictionary *)anayticsItems {
73
- // NSMutableDictionary<NSString *, id> *sanitizedDictionary = [NSMutableDictionary dictionaryWithDictionary:anayticsItems];
74
- //
75
- // id rawProducts = anayticsItems[@"paywallProducts"];
76
- // if ([rawProducts isKindOfClass:[NSArray class]]) {
77
- // NSMutableArray<NSDictionary *> *productsSanitized = [NSMutableArray new];
78
- // for (NamiSKU *product in (NSArray *)rawProducts) {
79
- // [productsSanitized addObject:[NamiBridgeUtil skuToSKUDict:product]];
80
- // }
81
- // sanitizedDictionary[@"paywallProducts"] = productsSanitized;
82
- // }
83
- //
84
- //
85
- // NSDate *purchseTimestamp = (NSDate *)(anayticsItems[@"purchasedProductPurchaseTimestamp"]);
86
- // if (purchseTimestamp != NULL && [purchseTimestamp isKindOfClass:[NSDate class]])
87
- // {
88
- // sanitizedDictionary[@"purchasedProductPurchaseTimestamp"] = [NamiBridgeUtil javascriptDateFromNSDate:purchseTimestamp];
89
- // }
90
- //
91
- // NSDictionary *purchasedProductDict = [self productDictIfProductPresentInAnalyticsItems:anayticsItems forKey:@"purchasedProduct"];
92
- // if ( purchasedProductDict != NULL ) {
93
- // sanitizedDictionary[@"purchasedProduct"] = purchasedProductDict;
94
- // sanitizedDictionary[@"purchasedProductPrice"] = purchasedProductDict[@"price"];
95
- // sanitizedDictionary[@"purchasedProductLocale"] = purchasedProductDict[@"priceLocale"];
96
- // }
97
- //
98
- // NSNumber *activityType = anayticsItems[@"purchaseActivityType"];
99
- // if (activityType != NULL && [activityType isKindOfClass:[NSNumber class]] ) {
100
- // switch (activityType.intValue) {
101
- // case 0: //newPurchase
102
- // sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"newPurchase";
103
- // break;
104
- // case 1: // cancelled
105
- // sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"cancelled";
106
- // break;
107
- // case 2: // resubscribe
108
- // sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"resubscribe";
109
- // break;
110
- // case 3: // restored
111
- // sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"restored";
112
- // break;
113
- // default:
114
- // break;
115
- // }
116
- // }
117
- //
118
- // return sanitizedDictionary;
119
- // }
120
-
121
- }
@@ -1,146 +0,0 @@
1
- //
2
- // NamiAnalyticsEmitter.m
3
- // RNNami
4
- //
5
- // Created by Kendall Gelner on 1/9/20.
6
- // Copyright © 2020 Nami ML Inc. All rights reserved.
7
- //
8
-
9
- #import <Foundation/Foundation.h>
10
-
11
-
12
- #import <Nami/Nami.h>
13
-
14
- #import <React/RCTBridgeModule.h>
15
- #import <React/RCTEventEmitter.h>
16
-
17
- #import "React/RCTViewManager.h"
18
- #import <UIKit/UIKit.h>
19
-
20
- #import "NamiBridgeUtil.h"
21
-
22
- @interface RCT_EXTERN_MODULE(NamiAnalyticsEmitter, RCTEventEmitter)
23
- @end
24
-
25
- @implementation NamiAnalyticsEmitter : RCTEventEmitter
26
-
27
- - (instancetype)init
28
- {
29
- self = [super init];
30
- if (self) {
31
- hasNamiAanlyticsEmitterListeners = NO;
32
-
33
- [NamiAnalyticsSupport registerAnalyticsHandlerWithHandler: ^(NamiAnalyticsActionType actionType , NSDictionary<NSString *,id> * _Nonnull anaytlicsDict) {
34
- [self sendAnalyticsEventForAction:actionType anayticsItems:anaytlicsDict];
35
- }];
36
- }
37
-
38
- return self;
39
- }
40
-
41
- + (BOOL)requiresMainQueueSetup {
42
- return YES;
43
- }
44
-
45
- - (NSArray<NSString *> *)supportedEvents {
46
- return @[@"NamiAnalyticsSent" ];
47
- }
48
-
49
- - (NSDictionary<NSString *, NSObject *> *)constantsToExport {
50
- return @{};
51
- }
52
-
53
- bool hasNamiAanlyticsEmitterListeners;
54
-
55
- // Will be called when this module's first listener is added.
56
- -(void)startObserving {
57
- hasNamiAanlyticsEmitterListeners = YES;
58
- }
59
-
60
- // Will be called when this module's last listener is removed, or on dealloc.
61
- -(void)stopObserving {
62
- hasNamiAanlyticsEmitterListeners = NO;
63
- }
64
-
65
- - (void)sendAnalyticsEventForAction:(NamiAnalyticsActionType)action
66
- anayticsItems:(NSDictionary *)anayticsItems {
67
- if (hasNamiAanlyticsEmitterListeners) {
68
- NSDictionary *sendAnalyitcsDict = [self sanitizeAnalyticsItems:anayticsItems];
69
-
70
- NSString *actionName = @"UNKNOWN";
71
- switch (action) {
72
- case NamiAnalyticsActionTypePaywallRaise:
73
- actionName = @"paywall_raise";
74
- break;
75
- case NamiAnalyticsActionTypePurchaseActivity:
76
- actionName = @"purchase_activity";
77
- break;
78
- }
79
-
80
- [self sendEventWithName:@"NamiAnalyticsSent" body:@{@"actionType" : actionName, @"analyticsItems": sendAnalyitcsDict}];
81
- }
82
- }
83
-
84
-
85
- - (NSDictionary *) skuDictIfSKUPresentInAnalyticsItems:(NSDictionary *)anayticsItems forKey:(NSString *)key {
86
- NamiSKU *product = (NamiSKU *)anayticsItems[key];
87
- if (product != NULL && [product isKindOfClass:[NamiSKU class]] ) {
88
- return [NamiBridgeUtil skuToSKUDict:product];
89
- } else {
90
- return NULL;
91
- }
92
- }
93
-
94
-
95
-
96
- - (NSDictionary <NSString *, id> *) sanitizeAnalyticsItems:(NSDictionary *)anayticsItems {
97
- NSMutableDictionary<NSString *, id> *sanitizedDictionary = [NSMutableDictionary dictionaryWithDictionary:anayticsItems];
98
-
99
- id rawProducts = anayticsItems[@"paywallSKUs"];
100
- if ([rawProducts isKindOfClass:[NSArray class]]) {
101
- NSMutableArray<NSDictionary *> *productsSanitized = [NSMutableArray new];
102
- for (NamiSKU *product in (NSArray *)rawProducts) {
103
- [productsSanitized addObject:[NamiBridgeUtil skuToSKUDict:product]];
104
- }
105
- sanitizedDictionary[@"paywallSKUs"] = productsSanitized;
106
- }
107
-
108
-
109
- NSDate *purchaseTimestamp = (NSDate *)(anayticsItems[@"purchasedSKUPurchaseTimestamp"]);
110
- if (purchaseTimestamp != NULL && [purchaseTimestamp isKindOfClass:[NSDate class]])
111
- {
112
- sanitizedDictionary[@"purchaseTimestamp"] = [NamiBridgeUtil javascriptDateFromNSDate:purchaseTimestamp];
113
- }
114
-
115
- NSDictionary *purchasedProductDict = [self skuDictIfSKUPresentInAnalyticsItems:anayticsItems forKey:@"purchasedSKU"];
116
- if ( purchasedProductDict != NULL ) {
117
- sanitizedDictionary[@"purchasedSKU"] = purchasedProductDict;
118
- sanitizedDictionary[@"purchasedSKUPrice"] = purchasedProductDict[@"price"];
119
- sanitizedDictionary[@"purchasedSKULocale"] = purchasedProductDict[@"priceLocale"];
120
- }
121
-
122
- NSNumber *activityType = anayticsItems[@"purchaseActivityType"];
123
- if (activityType != NULL && [activityType isKindOfClass:[NSNumber class]] ) {
124
- switch (activityType.intValue) {
125
- case 0: //newPurchase
126
- sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"newPurchase";
127
- break;
128
- case 1: // cancelled
129
- sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"cancelled";
130
- break;
131
- case 2: // resubscribe
132
- sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"resubscribe";
133
- break;
134
- case 3: // restored
135
- sanitizedDictionary[@"purchaseActivityType_ActivityType"] = @"restored";
136
- break;
137
- default:
138
- break;
139
- }
140
- }
141
-
142
- return sanitizedDictionary;
143
- }
144
-
145
-
146
- @end