react-native-moengage 8.1.2 → 8.3.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ # 09-02-2023
2
+
3
+ ## 8.3.0
4
+ - Android
5
+ - Android 13 push notification Opt-in with rationale via In-Apps
6
+ - Device Id enable / disable support
7
+ - BugFix
8
+ - Adding PushClick Callback Redirection Support if Application is in Foreground/Background State
9
+
10
+ # 16-01-2023
11
+
12
+ ## 8.2.0
13
+ - iOS
14
+ - MoEngage-iOS-SDK version updated to `~>9.2.0`.
15
+ - Updated API
16
+
17
+ | Then | Now |
18
+ |:----------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------:|
19
+ | - (void)initializeDefaultSDKConfig:(MOSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions; | -(void)initializeDefaultSDKConfig:(MoEngageSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions; |
20
+ | - (void)initializeDefaultSDKConfigWithState:(MOSDKConfig*)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions; | - (void)initializeDefaultSDKConfigWithState:(MoEngageSDKConfig*)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions; |
21
+
1
22
  # 21-11-2022
2
23
 
3
24
  ## 8.1.2
@@ -15,8 +15,8 @@ Pod::Spec.new do |s|
15
15
  s.platform = :ios, "10.0"
16
16
  s.source_files = 'iOS/MoEReactBridge/**/*.{h,m}'
17
17
  s.dependency 'React'
18
- s.dependency 'MoEngagePluginBase','>= 3.1.0','< 3.2.0'
19
- s.dependency 'MoEngageRichNotification','>= 6.4.0','< 6.5.0'
18
+ s.dependency 'MoEngagePluginBase','>= 4.0.0','< 4.1.0'
19
+ s.dependency 'MoEngageRichNotification','>= 7.2.0','< 7.3.0'
20
20
 
21
21
  s.prepare_command = <<-CMD
22
22
  echo // Generated file, do not edit > iOS/MoEReactBridge/MoEngageReactPluginInfo.h
@@ -20,9 +20,9 @@ rootProject.allprojects {
20
20
 
21
21
  ext {
22
22
  //dependency version
23
- moengageCoreVersion = "12.4.00"
24
- moengageInAppVersion = "6.4.0"
25
- basePluginVersion = "3.1.0"
23
+ moengageCoreVersion = "12.6.00"
24
+ moengageInAppVersion = "6.5.0"
25
+ basePluginVersion = "3.2.0"
26
26
  //build versions
27
27
  minimumVersion = 21
28
28
  targetVersion = 31
@@ -2,10 +2,12 @@ package com.moengage.react
2
2
 
3
3
  import com.facebook.react.bridge.ReactContext
4
4
  import com.facebook.react.bridge.WritableMap
5
+ import com.facebook.react.common.LifecycleState
5
6
  import com.facebook.react.modules.core.DeviceEventManagerModule
6
7
  import com.moengage.core.LogLevel
7
8
  import com.moengage.core.internal.logger.Logger
8
9
  import com.moengage.plugin.base.internal.EventEmitter
10
+ import com.moengage.plugin.base.internal.instanceMetaFromJson
9
11
  import com.moengage.plugin.base.internal.model.events.Event
10
12
  import com.moengage.plugin.base.internal.model.events.EventType
11
13
  import com.moengage.plugin.base.internal.model.events.inapp.InAppActionEvent
@@ -14,6 +16,7 @@ import com.moengage.plugin.base.internal.model.events.inapp.InAppSelfHandledEven
14
16
  import com.moengage.plugin.base.internal.model.events.push.PermissionEvent
15
17
  import com.moengage.plugin.base.internal.model.events.push.PushClickedEvent
16
18
  import com.moengage.plugin.base.internal.model.events.push.TokenEvent
19
+ import org.json.JSONObject
17
20
 
18
21
 
19
22
  /**
@@ -66,6 +69,13 @@ class EventEmitterImpl(private val reactContext: ReactContext) : EventEmitter {
66
69
  Logger.print { "$tag emitPushClicked() : $event" }
67
70
  val eventName = eventMapping[event.eventType] ?: return
68
71
  val payload = PayloadGenerator().pushPayloadToWriteableMap(event.payload)
72
+ if (GlobalCache.lifecycleAwarePushCallbackEnabled
73
+ && reactContext.lifecycleState != LifecycleState.RESUMED
74
+ ) {
75
+ Logger.print { "$tag emitPushClicked() : ${reactContext.lifecycleState}" }
76
+ GlobalCache.addPushClickedEventToCache(payload)
77
+ return
78
+ }
69
79
  emit(eventName, payload)
70
80
  }
71
81
 
@@ -91,6 +101,16 @@ class EventEmitterImpl(private val reactContext: ReactContext) : EventEmitter {
91
101
  val payload = PayloadGenerator().permissionResultToWriteableMap(event.result)
92
102
  emit(eventName, payload)
93
103
  }
104
+
105
+ internal fun emitPendingEvents() {
106
+ if (GlobalCache.lifecycleAwarePushCallbackEnabled) {
107
+ val cachedPushClickedEvent = GlobalCache.getPushClickedCachedEvent() ?: return
108
+ val eventName = eventMapping[EventType.PUSH_CLICKED] ?: return
109
+ GlobalCache.removePushClickedEventFromCache()
110
+
111
+ emit(eventName, cachedPushClickedEvent)
112
+ }
113
+ }
94
114
  }
95
115
 
96
116
  val eventMapping = mapOf<EventType, String>(
@@ -0,0 +1,25 @@
1
+ package com.moengage.react
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+
5
+ object GlobalCache {
6
+
7
+ var lifecycleAwarePushCallbackEnabled = false
8
+ internal set
9
+
10
+ private var pushClickedCachedEvent: WritableMap? = null
11
+
12
+ fun getPushClickedCachedEvent(): WritableMap? {
13
+ return pushClickedCachedEvent
14
+ }
15
+
16
+ internal fun addPushClickedEventToCache(
17
+ pushClickedEvent: WritableMap
18
+ ) {
19
+ this.pushClickedCachedEvent = pushClickedEvent
20
+ }
21
+
22
+ internal fun removePushClickedEventFromCache() {
23
+ pushClickedCachedEvent = null
24
+ }
25
+ }
@@ -40,9 +40,15 @@ object MoEInitializer {
40
40
  initializeDefaultInstance(context, builder, sdkState)
41
41
  }
42
42
 
43
- fun initializeDefaultInstance(context: Context, builder: MoEngage.Builder) {
43
+ @JvmOverloads
44
+ fun initializeDefaultInstance(
45
+ context: Context,
46
+ builder: MoEngage.Builder,
47
+ lifecycleAwarePushCallbackEnabled: Boolean = false
48
+ ) {
44
49
  try {
45
50
  Logger.print { "$tag initialize() : Will try to initialize the sdk." }
51
+ GlobalCache.lifecycleAwarePushCallbackEnabled = lifecycleAwarePushCallbackEnabled
46
52
  PluginInitializer.initialize(
47
53
  builder,
48
54
  IntegrationMeta(INTEGRATION_TYPE, BuildConfig.MOENGAGE_REACT_LIBRARY_VERSION)
@@ -52,9 +58,16 @@ object MoEInitializer {
52
58
  }
53
59
  }
54
60
 
55
- fun initializeDefaultInstance(context: Context, builder: MoEngage.Builder, sdkState: SdkState) {
61
+ @JvmOverloads
62
+ fun initializeDefaultInstance(
63
+ context: Context,
64
+ builder: MoEngage.Builder,
65
+ sdkState: SdkState,
66
+ lifecycleAwarePushCallbackEnabled: Boolean = false
67
+ ) {
56
68
  try {
57
69
  Logger.print { "$tag initialize() : Initialising MoEngage SDK." }
70
+ GlobalCache.lifecycleAwarePushCallbackEnabled = lifecycleAwarePushCallbackEnabled
58
71
  PluginInitializer.initialize(
59
72
  builder,
60
73
  IntegrationMeta(INTEGRATION_TYPE, BuildConfig.MOENGAGE_REACT_LIBRARY_VERSION),
@@ -6,8 +6,8 @@ import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.bridge.ReactContextBaseJavaModule
7
7
  import com.facebook.react.bridge.ReactMethod
8
8
  import com.moengage.core.LogLevel
9
- import com.moengage.core.internal.LIB_VERSION
10
9
  import com.moengage.core.internal.logger.Logger
10
+ import com.moengage.core.internal.utils.getSdkVersion
11
11
  import com.moengage.plugin.base.internal.PluginHelper
12
12
  import com.moengage.plugin.base.internal.setEventEmitter
13
13
 
@@ -21,6 +21,7 @@ class MoEReactBridge(private val reactContext: ReactApplicationContext) :
21
21
 
22
22
  private val context: Context = reactContext.applicationContext
23
23
  private val pluginHelper = PluginHelper()
24
+ private val moeSdkVersion = getSdkVersion()
24
25
 
25
26
  override fun getName(): String {
26
27
  return "MoEReactBridge"
@@ -151,7 +152,9 @@ class MoEReactBridge(private val reactContext: ReactApplicationContext) :
151
152
  try {
152
153
  Logger.print { "$tag initialize() : " }
153
154
  pluginHelper.initialise(payload)
154
- setEventEmitter(EventEmitterImpl(reactContext))
155
+ val eventEmitterImpl = EventEmitterImpl(reactContext)
156
+ eventEmitterImpl.emitPendingEvents()
157
+ setEventEmitter(eventEmitterImpl)
155
158
  } catch (t: Throwable) {
156
159
  Logger.print(LogLevel.ERROR, t) { "$tag initialize() : " }
157
160
  }
@@ -179,7 +182,7 @@ class MoEReactBridge(private val reactContext: ReactApplicationContext) :
179
182
  @ReactMethod
180
183
  fun validateSdkVersion(promise: Promise) {
181
184
  Logger.print { "$tag validateSdkVersion() : Validating Version" }
182
- if (LIB_VERSION > 13000) {
185
+ if (moeSdkVersion > 13000) {
183
186
  Logger.print(LogLevel.ERROR) { "$tag validateSdkVersion() : invalid version" }
184
187
  promise.reject("error", "Use SDK version 12.x.xx")
185
188
  } else {
@@ -254,4 +257,14 @@ class MoEReactBridge(private val reactContext: ReactApplicationContext) :
254
257
  Logger.print(LogLevel.ERROR, t) { "$tag permissionResponse() :" }
255
258
  }
256
259
  }
260
+
261
+ @ReactMethod
262
+ fun updatePushPermissionRequestCount(payload: String) {
263
+ try {
264
+ Logger.print { "$tag updatePushPermissionRequestCount() : Payload: $payload" }
265
+ pluginHelper.updatePushPermissionRequestCount(context, payload)
266
+ } catch (t: Throwable) {
267
+ Logger.print(LogLevel.ERROR, t) { "$tag updatePushPermissionRequestCount() :" }
268
+ }
269
+ }
257
270
  }
@@ -19,14 +19,14 @@ NS_ASSUME_NONNULL_BEGIN
19
19
 
20
20
  /// Initialization Methods to setup SDK with configuration parameters from Info.plist file
21
21
  /// @param launchOptions Launch Options dictionary
22
- /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MOSDKConfig instance)
22
+ /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MoEngageSDKConfig instance)
23
23
  /// @version 8.0.0 and above
24
24
  - (void)initializeDefaultInstance:(NSDictionary*)launchOptions;
25
25
 
26
26
  /// Initialization Methods to setup SDK with configuration parameters from Info.plist file
27
27
  /// @param sdkState MoEngageSDKState enum indicating if SDK is Enabled/Disabled, refer (link)[https://docs.moengage.com/docs/gdpr-compliance-1#enabledisable-sdk] for more info
28
28
  /// @param launchOptions Launch Options dictionary
29
- /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MOSDKConfig instance)
29
+ /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MoEngageSDKConfig instance)
30
30
  /// @version 8.1.0 and above
31
31
  - (void)initializeDefaultInstanceWithState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions;
32
32
 
@@ -37,28 +37,28 @@ NS_ASSUME_NONNULL_BEGIN
37
37
  /// @version 8.0.0 and above
38
38
  - (void)initializeDefaultInstance:(BOOL)isSdkEnabled andLaunchOptions:(NSDictionary*)launchOptions __deprecated_msg("Use initializeDefaultInstanceWithState:andLaunchOptions instead.");
39
39
 
40
- /// Initialization Methods to setup SDK with MOSDKConfig instance instead of from Info.plist file
41
- /// @param sdkConfig MOSDKConfig instance for SDK configuration
40
+ /// Initialization Methods to setup SDK with MoEngageSDKConfig instance instead of from Info.plist file
41
+ /// @param sdkConfig MoEngageSDKConfig instance for SDK configuration
42
42
  /// @param launchOptions Launch Options dictionary
43
43
  /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MOSDKConfig instance)
44
44
  /// @version 8.0.0 and above
45
- - (void)initializeDefaultSDKConfig:(MOSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions;
45
+ - (void)initializeDefaultSDKConfig:(MoEngageSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions;
46
46
 
47
- /// Initialization Methods to setup SDK with MOSDKConfig instance instead of from Info.plist file
48
- /// @param sdkConfig MOSDKConfig instance for SDK configuration
47
+ /// Initialization Methods to setup SDK with MoEngageSDKConfig instance instead of from Info.plist file
48
+ /// @param sdkConfig MoEngageSDKConfig instance for SDK configuration
49
49
  /// @param sdkState MoEngageSDKState indicating if SDK is Enabled/Disabled, refer (link)[https://docs.moengage.com/docs/gdpr-compliance-1#enabledisable-sdk] for more info
50
50
  /// @param launchOptions Launch Options dictionary
51
51
  /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MOSDKConfig instance)
52
52
  /// @version 8.1.0 and above
53
- - (void)initializeDefaultSDKConfigWithState:(MOSDKConfig*)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions;
53
+ - (void)initializeDefaultSDKConfigWithState:(MoEngageSDKConfig*)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions;
54
54
 
55
- /// Initialization Methods to setup SDK with MOSDKConfig instance instead of from Info.plist file
56
- /// @param sdkConfig MOSDKConfig instance for SDK configuration
55
+ /// Initialization Methods to setup SDK with MoEngageSDKConfig instance instead of from Info.plist file
56
+ /// @param sdkConfig MoEngageSDKConfig instance for SDK configuration
57
57
  /// @param isSdkEnabled Bool indicating if SDK is Enabled/Disabled, refer (link)[https://docs.moengage.com/docs/gdpr-compliance-1#enabledisable-sdk] for more info
58
58
  /// @param launchOptions Launch Options dictionary
59
59
  /// @warning Make sure to call only one of the initialization methods available (either with plist OR with MOSDKConfig instance)
60
60
  /// @version 8.0.0 and above
61
- - (void)initializeDefaultSDKConfig:(MOSDKConfig*)sdkConfig withSDKState:(BOOL)isSdkEnabled andLaunchOptions:(NSDictionary*)launchOptions __deprecated_msg("Use initializeDefaultSDKConfigWithState:andLaunchOptions instead.");
61
+ - (void)initializeDefaultSDKConfig:(MoEngageSDKConfig*)sdkConfig withSDKState:(BOOL)isSdkEnabled andLaunchOptions:(NSDictionary*)launchOptions __deprecated_msg("Use initializeDefaultSDKConfigWithState:andLaunchOptions instead.");
62
62
  @end
63
63
 
64
64
  NS_ASSUME_NONNULL_END
@@ -34,29 +34,29 @@
34
34
  [self initializeDefaultSDKConfig:[self fetchSDKConfig] andLaunchOptions:launchOptions];
35
35
  }
36
36
 
37
- - (void)initializeDefaultSDKConfig:(MOSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions{
37
+ - (void)initializeDefaultSDKConfig:(MoEngageSDKConfig*)sdkConfig andLaunchOptions:(NSDictionary*)launchOptions{
38
38
  MoEngagePlugin *plugin = [[MoEngagePlugin alloc] init];
39
39
  [plugin initializeDefaultInstanceWithSdkConfig:sdkConfig launchOptions:launchOptions];
40
40
  [self commonSetUp:plugin identifier:sdkConfig.identifier];
41
41
  }
42
42
 
43
43
  - (void)initializeDefaultInstance:(BOOL)isSdkEnabled andLaunchOptions:(NSDictionary*)launchOptions{
44
- MOSDKConfig *sdkConfig = [self fetchSDKConfig];
44
+ MoEngageSDKConfig *sdkConfig = [self fetchSDKConfig];
45
45
  MoEngageSDKState currentSDKState = isSdkEnabled ? MoEngageSDKStateEnabled: MoEngageSDKStateDisabled;
46
46
  [self initializeDefaultSDKConfigWithState:sdkConfig withSDKState:currentSDKState andLaunchOptions:launchOptions];
47
47
  }
48
48
 
49
49
  - (void)initializeDefaultInstanceWithState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions{
50
- MOSDKConfig *sdkConfig = [self fetchSDKConfig];
50
+ MoEngageSDKConfig *sdkConfig = [self fetchSDKConfig];
51
51
  [self initializeDefaultSDKConfigWithState:sdkConfig withSDKState:sdkState andLaunchOptions:launchOptions];
52
52
  }
53
53
 
54
- - (void)initializeDefaultSDKConfig:(MOSDKConfig*)sdkConfig withSDKState:(BOOL)isSDKEnabled andLaunchOptions:(NSDictionary*)launchOptions{
54
+ - (void)initializeDefaultSDKConfig:(MoEngageSDKConfig*)sdkConfig withSDKState:(BOOL)isSDKEnabled andLaunchOptions:(NSDictionary*)launchOptions{
55
55
  MoEngageSDKState currentSDKState = isSDKEnabled ? MoEngageSDKStateEnabled: MoEngageSDKStateDisabled;
56
56
  [self initializeDefaultSDKConfigWithState:sdkConfig withSDKState:currentSDKState andLaunchOptions:launchOptions];
57
57
  }
58
58
 
59
- - (void)initializeDefaultSDKConfigWithState:(MOSDKConfig*)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions{
59
+ - (void)initializeDefaultSDKConfigWithState:(MoEngageSDKConfig *)sdkConfig withSDKState:(MoEngageSDKState)sdkState andLaunchOptions:(NSDictionary*)launchOptions{
60
60
 
61
61
  MoEngagePlugin *plugin = [[MoEngagePlugin alloc] init];
62
62
  [plugin initializeDefaultInstanceWithSdkConfig:sdkConfig sdkState:sdkState launchOptions:launchOptions];
@@ -74,9 +74,9 @@
74
74
  [[MoEngagePluginBridge sharedInstance] setPluginBridgeDelegate:self identifier:identifier];
75
75
  }
76
76
 
77
- -(MOSDKConfig*)fetchSDKConfig {
77
+ -(MoEngageSDKConfig*)fetchSDKConfig {
78
78
  NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
79
- MOSDKConfig *sdkConfig;
79
+ MoEngageSDKConfig *sdkConfig;
80
80
 
81
81
  if ( [infoDict objectForKey: kMoEngage] != nil && [infoDict objectForKey: kMoEngage] != [NSNull null]) {
82
82
  NSDictionary* moeDict = [infoDict objectForKey: kMoEngage];
@@ -84,7 +84,7 @@
84
84
 
85
85
  NSString *appId = [moeDict objectForKey: kAppId];
86
86
  if (appId.length > 0) {
87
- sdkConfig = [[MOSDKConfig alloc] initWithAppID:appId];
87
+ sdkConfig = [[MoEngageSDKConfig alloc] initWithAppID:appId];
88
88
  }
89
89
  } else {
90
90
  NSAssert(NO, @"MoEngage - Configure the APP ID for your MoEngage App.To get the AppID login to your MoEngage account, after that go to Settings -> App Settings. You will find the App ID in this screen. And refer to docs.moengage.com for more info");
@@ -119,20 +119,23 @@
119
119
  return sdkConfig;
120
120
  }
121
121
 
122
- - (MODataCenter)getDataCenterFromString:(NSString*)stringVal {
123
- MODataCenter dataCenter = MODataCenterData_center_01;
122
+ - (MoEngageDataCenter)getDataCenterFromString:(NSString*)stringVal {
123
+ MoEngageDataCenter dataCenter = MoEngageDataCenterData_center_01;
124
124
 
125
125
  if ([stringVal isEqual:kDataCenter1])
126
126
  {
127
- dataCenter = MODataCenterData_center_01;
127
+ dataCenter = MoEngageDataCenterData_center_01;
128
128
  }
129
129
  else if ([stringVal isEqual:kDataCenter2])
130
130
  {
131
- dataCenter = MODataCenterData_center_02;
131
+ dataCenter = MoEngageDataCenterData_center_02;
132
132
  }
133
133
  else if ([stringVal isEqual:kDataCenter3])
134
134
  {
135
- dataCenter = MODataCenterData_center_03;
135
+ dataCenter = MoEngageDataCenterData_center_03;
136
+ } else if ([stringVal isEqual: kDataCenter4])
137
+ {
138
+ dataCenter = MoEngageDataCenterData_center_04;
136
139
  }
137
140
  else
138
141
  {
@@ -27,6 +27,8 @@ extern NSString* const kEnableLogs;
27
27
  extern NSString* const kDataCenter1;
28
28
  extern NSString* const kDataCenter2;
29
29
  extern NSString* const kDataCenter3;
30
+ extern NSString* const kDataCenter4;
31
+
30
32
 
31
33
  //PayLoad Constants
32
34
  extern NSString* const kPayload;
@@ -24,6 +24,8 @@ NSString* const kEnableLogs = @"ENABLE_LOGS";
24
24
  NSString* const kDataCenter1 = @"DATA_CENTER_01";
25
25
  NSString* const kDataCenter2 = @"DATA_CENTER_02";
26
26
  NSString* const kDataCenter3 = @"DATA_CENTER_03";
27
+ NSString* const kDataCenter4 = @"DATA_CENTER_04";
28
+
27
29
 
28
30
  //PayLoad Constants
29
31
  NSString* const kPayload = @"payload";
@@ -1,2 +1,2 @@
1
1
  // Generated file, do not edit
2
- #define MOE_REACT_PLUGIN_VERSION @"8.1.1"
2
+ #define MOE_REACT_PLUGIN_VERSION @"8.1.2"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-moengage",
3
- "version": "8.1.2",
3
+ "version": "8.3.0",
4
4
  "description": "MoEngage is a mobile marketing automation company. This react-native SDK helps you track events, trigger smart notifications and in-apps, provides a drop-in Inbox Controller for notifications.",
5
5
  "main": "src/index.ts",
6
6
  "keywords": [
package/src/index.ts CHANGED
@@ -24,7 +24,9 @@ import {
24
24
  getSdkStateJson,
25
25
  getSelfHandledJson,
26
26
  getUserAttributeJson,
27
- getUserLocAttributeJson
27
+ getUserLocAttributeJson,
28
+ getPushPermissionRequestCountJson,
29
+ getDeviceIdTrackingJson
28
30
  } from "./utils/MoEJsonBuilder";
29
31
  import {
30
32
  USER_ATTRIBUTE_UNIQUE_ID,
@@ -751,6 +753,47 @@ var ReactMoE = {
751
753
  if (Platform.OS == PLATFORM_ANDROID) {
752
754
  MoERNAndroid.requestPushPermission();
753
755
  }
756
+ },
757
+
758
+ /**
759
+ * API to update push permission request count. The count will be incremented on every call.
760
+ * Note: This API is only for Android platform and is a no-operation method for other plaforms.
761
+ *
762
+ * @param {number} count - number of times push permission requested
763
+ */
764
+ updatePushPermissionRequestCountAndroid: function (count: number) {
765
+ console.log("Will increment push permission request count");
766
+ let payload = getPushPermissionRequestCountJson(count, moeAppId);
767
+
768
+ if (Platform.OS == PLATFORM_ANDROID) {
769
+ MoERNAndroid.updatePushPermissionRequestCount(payload);
770
+ }
771
+ },
772
+
773
+ /**
774
+ * API to enable Device Id tracking for Android.
775
+ *
776
+ * Note: By default Device Id tracking is enabled
777
+ */
778
+ enableDeviceIdTracking: function () {
779
+ console.log("Will enable device id tracking");
780
+ let payload = getDeviceIdTrackingJson(true, moeAppId);
781
+
782
+ if (Platform.OS == PLATFORM_ANDROID) {
783
+ MoERNAndroid.enableDeviceIdTracking(payload);
784
+ }
785
+ },
786
+
787
+ /**
788
+ * API to disable Device Id tracking for Android.
789
+ */
790
+ disableDeviceIdTracking: function () {
791
+ console.log("Will disable device id tracking");
792
+ let payload = getDeviceIdTrackingJson(false, moeAppId);
793
+
794
+ if (Platform.OS == PLATFORM_ANDROID) {
795
+ MoERNAndroid.disableDeviceIdTracking(payload);
796
+ }
754
797
  }
755
798
 
756
799
  };
@@ -143,6 +143,18 @@ export class MoERNAndroid {
143
143
  static requestPushPermission() {
144
144
  MoEReactBridge.requestPushPermission();
145
145
  }
146
+
147
+ static updatePushPermissionRequestCount(payload: { [k: string]: any }) {
148
+ MoEReactBridge.updatePushPermissionRequestCount(JSON.stringify(payload));
149
+ }
150
+
151
+ static enableDeviceIdTracking(payload: { [k: string]: any }) {
152
+ MoEReactBridge.deviceIdentifierTrackingStatusUpdate(JSON.stringify(payload))
153
+ }
154
+
155
+ static disableDeviceIdTracking(payload: { [k: string]: any }) {
156
+ MoEReactBridge.deviceIdentifierTrackingStatusUpdate(JSON.stringify(payload))
157
+ }
146
158
  }
147
159
 
148
160
  const PUSH_SERVICE_FCM = "FCM"
@@ -226,4 +226,28 @@ export function getPermissionResponseJson(isGranted: boolean, permissionType: Mo
226
226
  type: permissionType.toLowerCase()
227
227
  }
228
228
  return json;
229
+ }
230
+
231
+ export function getPushPermissionRequestCountJson(count: number, appId: String) {
232
+ var json: { [k: string]: any } = {
233
+ accountMeta: {
234
+ appId: appId
235
+ },
236
+ data: {
237
+ pushOptinInAttemptCount: count
238
+ }
239
+ }
240
+ return json;
241
+ }
242
+
243
+ export function getDeviceIdTrackingJson(isDeviceIdTrackingEnabled: Boolean, appId: String) {
244
+ var json: { [k: string]: any } = {
245
+ accountMeta: {
246
+ appId: appId
247
+ },
248
+ data: {
249
+ isDeviceIdTrackingEnabled: isDeviceIdTrackingEnabled
250
+ }
251
+ }
252
+ return json;
229
253
  }
@@ -1,24 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Bucket
3
- uuid = "A9D2CCE5-E1E4-46E2-8FD6-8A880E005343"
4
- type = "1"
5
- version = "2.0">
6
- <Breakpoints>
7
- <BreakpointProxy
8
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
9
- <BreakpointContent
10
- uuid = "B5C2799E-B498-4B55-9AB4-16D905914902"
11
- shouldBeEnabled = "Yes"
12
- ignoreCount = "0"
13
- continueAfterRunningActions = "No"
14
- filePath = "MoEReactBridge/MOReactInitializer.m"
15
- startingColumnNumber = "9223372036854775807"
16
- endingColumnNumber = "9223372036854775807"
17
- startingLineNumber = "34"
18
- endingLineNumber = "34"
19
- landmarkName = "-intializeSDKWithLaunchOptions:"
20
- landmarkType = "7">
21
- </BreakpointContent>
22
- </BreakpointProxy>
23
- </Breakpoints>
24
- </Bucket>