reteno-react-native-sdk 1.2.0 → 1.4.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.
@@ -74,7 +74,7 @@ dependencies {
74
74
  //noinspection GradleDynamicVersion
75
75
  implementation "com.facebook.react:react-native"
76
76
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
77
- implementation 'com.reteno:fcm:1.6.4'
77
+ implementation 'com.reteno:fcm:1.6.7'
78
78
  implementation "com.google.firebase:firebase-messaging:23.1.0"
79
79
  implementation "com.google.firebase:firebase-messaging-ktx:23.1.0"
80
80
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
@@ -19,6 +19,7 @@ import com.facebook.react.bridge.WritableNativeMap;
19
19
  import com.facebook.react.modules.core.DeviceEventManagerModule;
20
20
  import com.reteno.core.RetenoApplication;
21
21
  import com.reteno.core.domain.model.user.User;
22
+ import com.reteno.core.domain.model.user.UserAttributesAnonymous;
22
23
 
23
24
  public class RetenoSdkModule extends ReactContextBaseJavaModule {
24
25
  public static final String NAME = "RetenoSdk";
@@ -141,4 +142,36 @@ public class RetenoSdkModule extends ReactContextBaseJavaModule {
141
142
  res.putBoolean("success", true);
142
143
  promise.resolve(res);
143
144
  }
145
+
146
+ @ReactMethod
147
+ public void setAnonymousUserAttributes(ReadableMap payload, Promise promise) {
148
+
149
+ UserAttributesAnonymous anonymousUser = RetenoUserAttributes.buildAnonymousUserFromPayload(payload);
150
+
151
+ try {
152
+ ((RetenoApplication) this.context.getCurrentActivity().getApplication())
153
+ .getRetenoInstance()
154
+ .setAnonymousUserAttributes(anonymousUser);
155
+ } catch (Exception e) {
156
+ promise.reject("Reteno Android SDK Error", e);
157
+ return;
158
+ }
159
+
160
+
161
+ WritableMap res = new WritableNativeMap();
162
+ res.putBoolean("success", true);
163
+
164
+ promise.resolve(res);
165
+ }
166
+
167
+ @ReactMethod
168
+ public void forcePushData(Promise promise) {
169
+ try {
170
+ ((RetenoApplication) this.context.getCurrentActivity().getApplication())
171
+ .getRetenoInstance().forcePushData();
172
+ promise.resolve(true);
173
+ } catch (Exception e) {
174
+ promise.reject("Reteno Android SDK forcePushData Error", e);
175
+ }
176
+ }
144
177
  }
@@ -5,6 +5,7 @@ import com.facebook.react.bridge.ReadableArray;
5
5
  import com.reteno.core.domain.model.user.Address;
6
6
  import com.reteno.core.domain.model.user.User;
7
7
  import com.reteno.core.domain.model.user.UserAttributes;
8
+ import com.reteno.core.domain.model.user.UserAttributesAnonymous;
8
9
  import com.reteno.core.domain.model.user.UserCustomField;
9
10
 
10
11
  import java.util.ArrayList;
@@ -119,4 +120,34 @@ public class RetenoUserAttributes {
119
120
 
120
121
  return new User(userAttributes, subscriptionKeys, groupNamesInclude, groupNamesExclude);
121
122
  }
123
+
124
+ public static UserAttributesAnonymous buildAnonymousUserFromPayload(ReadableMap payload) {
125
+
126
+ String payloadFirstName = payload.getString("firstName");
127
+ String payloadLastName = payload.getString("lastName");
128
+ String payloadLanguageCode = payload.getString("languageCode");
129
+ String payloadTimeZone = payload.getString("timeZone");
130
+ ReadableMap payloadAddress = payload.getMap("address");
131
+ ReadableArray payloadFields = payload.getArray("fields");
132
+
133
+ Address address = null;
134
+
135
+ List<UserCustomField> fields = null;
136
+
137
+
138
+ if (payloadAddress != null) {
139
+ address = new Address(
140
+ RetenoUtil.getStringOrNull(payloadAddress.getString("region")),
141
+ RetenoUtil.getStringOrNull(payloadAddress.getString("town")),
142
+ RetenoUtil.getStringOrNull(payloadAddress.getString("address")),
143
+ RetenoUtil.getStringOrNull(payloadAddress.getString("postcode"))
144
+ );
145
+ }
146
+
147
+ if (payloadFields != null) {
148
+ fields = buildUserCustomData(payloadFields);
149
+ }
150
+
151
+ return new UserAttributesAnonymous(payloadFirstName, payloadLastName, payloadLanguageCode, payloadTimeZone, address, fields);
152
+ };
122
153
  }
package/ios/RetenoSdk.m CHANGED
@@ -20,6 +20,10 @@ RCT_EXTERN_METHOD(getInitialNotification:(RCTPromiseResolveBlock)resolve
20
20
 
21
21
  RCT_EXTERN_METHOD(registerForRemoteNotifications)
22
22
 
23
+ RCT_EXTERN_METHOD(setAnonymousUserAttributes:(NSDictionary*)payload
24
+ withResolver:(RCTPromiseResolveBlock)resolve
25
+ withRejecter:(RCTPromiseRejectBlock)reject)
26
+
23
27
  RCT_EXTERN_METHOD(supportedEvents)
24
28
 
25
29
  + (BOOL)requiresMainQueueSetup
@@ -86,4 +86,16 @@ open class RetenoSdk: RCTEventEmitter {
86
86
  // registerForRemoteNotifications will show the native iOS notification permission prompt
87
87
  Reteno.userNotificationService.registerForRemoteNotifications(with: [.sound, .alert, .badge], application: UIApplication.shared);
88
88
  }
89
+
90
+ @objc(setAnonymousUserAttributes:withResolver:withRejecter:)
91
+ func setAnonymousUserAttributes(payload: NSDictionary, resolve:RCTPromiseResolveBlock,reject:RCTPromiseRejectBlock) -> Void {
92
+ do {
93
+ let anonymousUser = try RetenoUserAttributes.buildSetAnonymousUserAttributesPayload(payload: payload)
94
+
95
+ Reteno.updateAnonymousUserAttributes(userAttributes: anonymousUser)
96
+ resolve(true)
97
+ } catch {
98
+ reject("100", "Reteno iOS SDK setAnonymousUserAttributes Error", error);
99
+ }
100
+ }
89
101
  }
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Bucket
3
+ uuid = "541F07FB-6D60-4295-BE13-75818DE6991C"
4
+ type = "1"
5
+ version = "2.0">
6
+ </Bucket>
@@ -76,6 +76,8 @@ public struct RetenoSetUserAttributesPayload: Codable {
76
76
  let groupNamesExclude: [String]
77
77
  }
78
78
 
79
+
80
+
79
81
  public struct RetenoUserAttributes {
80
82
 
81
83
 
@@ -125,5 +127,24 @@ public struct RetenoUserAttributes {
125
127
  }
126
128
  }
127
129
 
130
+ public static func buildSetAnonymousUserAttributesPayload(payload: NSDictionary) throws -> AnonymousUserAttributes {
131
+ print(payload)
132
+ let fields = payload["fields"] as? [RetenoUserAttributesFieldStruct]
133
+ let mappedFields = fields?.map { field in
134
+ UserCustomField(key: field.key, value: field.value)
135
+ }
136
+ let addressField = payload["address"] as? [String: String]
137
+
138
+ let address = addressField != nil ? Address(
139
+ region: getStringOrNil(input: addressField!["region"]),
140
+ town: getStringOrNil(input: addressField!["town"]),
141
+ address: getStringOrNil(input: addressField!["address"]),
142
+ postcode: getStringOrNil(input: addressField!["postcode"])
143
+ ) : nil
144
+
145
+
146
+ return AnonymousUserAttributes(firstName: getStringOrNil(input: payload["firstName"] as? String), lastName: getStringOrNil(input: payload["lastName"] as? String), languageCode: getStringOrNil(input: payload["languageCode"] as? String), timeZone: getStringOrNil(input: payload["timeZone"] as? String), address: address, fields: mappedFields ?? [])
147
+
148
+ }
128
149
 
129
150
  }
@@ -3,9 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.CustomEventTypes = void 0;
7
+ exports.forcePushData = forcePushData;
6
8
  exports.getInitialNotification = getInitialNotification;
7
9
  exports.logEvent = logEvent;
10
+ exports.logScreenView = logScreenView;
8
11
  exports.registerForRemoteNotifications = registerForRemoteNotifications;
12
+ exports.setAnonymousUserAttributes = setAnonymousUserAttributes;
9
13
  exports.setDeviceToken = setDeviceToken;
10
14
  exports.setOnRetenoPushReceivedListener = setOnRetenoPushReceivedListener;
11
15
  exports.setUserAttributes = setUserAttributes;
@@ -14,6 +18,11 @@ const LINKING_ERROR = `The package 'reteno-react-native-sdk' doesn't seem to be
14
18
  ios: "- You have run 'pod install'\n",
15
19
  default: ''
16
20
  }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
21
+ let CustomEventTypes;
22
+ exports.CustomEventTypes = CustomEventTypes;
23
+ (function (CustomEventTypes) {
24
+ CustomEventTypes["screenView"] = "screenView";
25
+ })(CustomEventTypes || (exports.CustomEventTypes = CustomEventTypes = {}));
17
26
  const RetenoSdk = _reactNative.NativeModules.RetenoSdk ? _reactNative.NativeModules.RetenoSdk : new Proxy({}, {
18
27
  get() {
19
28
  throw new Error(LINKING_ERROR);
@@ -39,9 +48,17 @@ const eventEmitter = _reactNative.Platform.select({
39
48
  function setOnRetenoPushReceivedListener(listener) {
40
49
  return eventEmitter.addListener('reteno-push-received', listener);
41
50
  }
42
- function logEvent(eventName, date,
51
+
52
+ /**
53
+ * Log event
54
+ * @param eventName name of the event
55
+ * @param date date parameter should be in ISO8601 format, e.g new Date().toISOString()
56
+ * @param parameters custom parameters
57
+ * @param forcePush IOS force push
58
+ */
59
+ function logEvent(eventName,
43
60
  // date parameter should be in ISO8601 format
44
- parameters, forcePush) {
61
+ date, parameters, forcePush) {
45
62
  return RetenoSdk.logEvent({
46
63
  eventName,
47
64
  date,
@@ -49,9 +66,37 @@ parameters, forcePush) {
49
66
  forcePush
50
67
  });
51
68
  }
69
+
70
+ /**
71
+ * IOS Only
72
+ */
52
73
  function registerForRemoteNotifications() {
53
74
  if (_reactNative.Platform.OS === 'ios') {
54
75
  RetenoSdk.registerForRemoteNotifications();
55
76
  }
56
77
  }
78
+ function setAnonymousUserAttributes(payload) {
79
+ return RetenoSdk.setAnonymousUserAttributes(payload);
80
+ }
81
+ /**
82
+ *
83
+ * Reteno caches all events (events, device data, user information, user behavior, screen tracking, push statuses, etc) locally into database
84
+ * Call this function to send all accumulated events
85
+ */
86
+ function forcePushData() {
87
+ if (_reactNative.Platform.OS === 'ios') {
88
+ // for ios we have to use this hack, because there isn't separate forcePush function as on android, sending an event with forcePush flag does the same thing
89
+ return logEvent('', new Date().toISOString(), [], true);
90
+ } else return RetenoSdk.forcePushData();
91
+ }
92
+ /**
93
+ * Send log screen view event
94
+ * @param screenName name of the screen
95
+ */
96
+ function logScreenView(screenName) {
97
+ return logEvent(CustomEventTypes.screenView, new Date().toISOString(), [{
98
+ name: CustomEventTypes.screenView,
99
+ value: screenName
100
+ }]);
101
+ }
57
102
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["LINKING_ERROR","Platform","select","ios","default","RetenoSdk","NativeModules","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","eventEmitter","NativeEventEmitter","android","DeviceEventEmitter","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;AAAA;AAOA,MAAMA,aAAa,GAChB,kFAAiF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AA4CjC,MAAMC,SAAS,GAAGC,0BAAa,CAACD,SAAS,GACrCC,0BAAa,CAACD,SAAS,GACvB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEE,SAASU,cAAc,CAACC,WAAmB,EAAiB;EACjE,OAAON,SAAS,CAACK,cAAc,CAACC,WAAW,CAAC;AAC9C;AAEO,SAASC,iBAAiB,CAC/BC,OAAiC,EAClB;EACf,IACE,CAACA,OAAO,CAACC,cAAc,IACtBD,OAAO,CAACC,cAAc,IAAID,OAAO,CAACC,cAAc,CAACC,MAAM,KAAK,CAAE,EAC/D;IACA,MAAM,IAAIN,KAAK,CAAC,oCAAoC,CAAC;EACvD;EACA,OAAOJ,SAAS,CAACO,iBAAiB,CAACC,OAAO,CAAC;AAC7C;AAEO,SAASG,sBAAsB,GAAiB;EACrD,OAAOX,SAAS,CAACW,sBAAsB,EAAE;AAC3C;AAEA,MAAMC,YAAY,GAAGhB,qBAAQ,CAACC,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIe,+BAAkB,CAACb,SAAS,CAAC;EACtC;EACAc,OAAO,EAAEC;AACX,CAAC,CAAC;AAEK,SAASC,+BAA+B,CAC7CC,QAA8B,EAC9B;EACA,OAAOL,YAAY,CAACM,WAAW,CAAC,sBAAsB,EAAED,QAAQ,CAAC;AACnE;AAEO,SAASE,QAAQ,CACtBC,SAAiB,EACjBC,IAAY;AACZ;AACAC,UAAkC,EAClCC,SAAmB,EACnB;EACA,OAAOvB,SAAS,CAACmB,QAAQ,CAAC;IACxBC,SAAS;IACTC,IAAI;IACJC,UAAU;IACVC;EACF,CAAC,CAAC;AACJ;AAEO,SAASC,8BAA8B,GAAG;EAC/C,IAAI5B,qBAAQ,CAAC6B,EAAE,KAAK,KAAK,EAAE;IACzBzB,SAAS,CAACwB,8BAA8B,EAAE;EAC5C;AACF"}
1
+ {"version":3,"names":["LINKING_ERROR","Platform","select","ios","default","CustomEventTypes","RetenoSdk","NativeModules","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","eventEmitter","NativeEventEmitter","android","DeviceEventEmitter","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS","setAnonymousUserAttributes","forcePushData","Date","toISOString","logScreenView","screenName","screenView","name","value"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;AAAA;AAOA,MAAMA,aAAa,GAChB,kFAAiF,GAClFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAAC,IAEtBC,gBAAgB;AAAA;AAAA,WAAhBA,gBAAgB;EAAhBA,gBAAgB;AAAA,GAAhBA,gBAAgB,gCAAhBA,gBAAgB;AAmD5B,MAAMC,SAAS,GAAGC,0BAAa,CAACD,SAAS,GACrCC,0BAAa,CAACD,SAAS,GACvB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACV,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEE,SAASW,cAAc,CAACC,WAAmB,EAAiB;EACjE,OAAON,SAAS,CAACK,cAAc,CAACC,WAAW,CAAC;AAC9C;AAEO,SAASC,iBAAiB,CAC/BC,OAAiC,EAClB;EACf,IACE,CAACA,OAAO,CAACC,cAAc,IACtBD,OAAO,CAACC,cAAc,IAAID,OAAO,CAACC,cAAc,CAACC,MAAM,KAAK,CAAE,EAC/D;IACA,MAAM,IAAIN,KAAK,CAAC,oCAAoC,CAAC;EACvD;EACA,OAAOJ,SAAS,CAACO,iBAAiB,CAACC,OAAO,CAAC;AAC7C;AAEO,SAASG,sBAAsB,GAAiB;EACrD,OAAOX,SAAS,CAACW,sBAAsB,EAAE;AAC3C;AAEA,MAAMC,YAAY,GAAGjB,qBAAQ,CAACC,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIgB,+BAAkB,CAACb,SAAS,CAAC;EACtC;EACAc,OAAO,EAAEC;AACX,CAAC,CAAC;AAEK,SAASC,+BAA+B,CAC7CC,QAA8B,EAC9B;EACA,OAAOL,YAAY,CAACM,WAAW,CAAC,sBAAsB,EAAED,QAAQ,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,QAAQ,CACtBC,SAAiB;AACjB;AACAC,IAAY,EACZC,UAAkC,EAClCC,SAAmB,EACJ;EACf,OAAOvB,SAAS,CAACmB,QAAQ,CAAC;IACxBC,SAAS;IACTC,IAAI;IACJC,UAAU;IACVC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,SAASC,8BAA8B,GAAG;EAC/C,IAAI7B,qBAAQ,CAAC8B,EAAE,KAAK,KAAK,EAAE;IACzBzB,SAAS,CAACwB,8BAA8B,EAAE;EAC5C;AACF;AAEO,SAASE,0BAA0B,CACxClB,OAAgC,EACjB;EACf,OAAOR,SAAS,CAAC0B,0BAA0B,CAAClB,OAAO,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACO,SAASmB,aAAa,GAAkB;EAC7C,IAAIhC,qBAAQ,CAAC8B,EAAE,KAAK,KAAK,EAAE;IACzB;IACA,OAAON,QAAQ,CAAC,EAAE,EAAE,IAAIS,IAAI,EAAE,CAACC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;EACzD,CAAC,MAAM,OAAO7B,SAAS,CAAC2B,aAAa,EAAE;AACzC;AACA;AACA;AACA;AACA;AACO,SAASG,aAAa,CAACC,UAAkB,EAAE;EAChD,OAAOZ,QAAQ,CAACpB,gBAAgB,CAACiC,UAAU,EAAE,IAAIJ,IAAI,EAAE,CAACC,WAAW,EAAE,EAAE,CACrE;IAAEI,IAAI,EAAElC,gBAAgB,CAACiC,UAAU;IAAEE,KAAK,EAAEH;EAAW,CAAC,CACzD,CAAC;AACJ"}
@@ -3,6 +3,10 @@ const LINKING_ERROR = `The package 'reteno-react-native-sdk' doesn't seem to be
3
3
  ios: "- You have run 'pod install'\n",
4
4
  default: ''
5
5
  }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
6
+ export let CustomEventTypes;
7
+ (function (CustomEventTypes) {
8
+ CustomEventTypes["screenView"] = "screenView";
9
+ })(CustomEventTypes || (CustomEventTypes = {}));
6
10
  const RetenoSdk = NativeModules.RetenoSdk ? NativeModules.RetenoSdk : new Proxy({}, {
7
11
  get() {
8
12
  throw new Error(LINKING_ERROR);
@@ -28,9 +32,17 @@ const eventEmitter = Platform.select({
28
32
  export function setOnRetenoPushReceivedListener(listener) {
29
33
  return eventEmitter.addListener('reteno-push-received', listener);
30
34
  }
31
- export function logEvent(eventName, date,
35
+
36
+ /**
37
+ * Log event
38
+ * @param eventName name of the event
39
+ * @param date date parameter should be in ISO8601 format, e.g new Date().toISOString()
40
+ * @param parameters custom parameters
41
+ * @param forcePush IOS force push
42
+ */
43
+ export function logEvent(eventName,
32
44
  // date parameter should be in ISO8601 format
33
- parameters, forcePush) {
45
+ date, parameters, forcePush) {
34
46
  return RetenoSdk.logEvent({
35
47
  eventName,
36
48
  date,
@@ -38,9 +50,37 @@ parameters, forcePush) {
38
50
  forcePush
39
51
  });
40
52
  }
53
+
54
+ /**
55
+ * IOS Only
56
+ */
41
57
  export function registerForRemoteNotifications() {
42
58
  if (Platform.OS === 'ios') {
43
59
  RetenoSdk.registerForRemoteNotifications();
44
60
  }
45
61
  }
62
+ export function setAnonymousUserAttributes(payload) {
63
+ return RetenoSdk.setAnonymousUserAttributes(payload);
64
+ }
65
+ /**
66
+ *
67
+ * Reteno caches all events (events, device data, user information, user behavior, screen tracking, push statuses, etc) locally into database
68
+ * Call this function to send all accumulated events
69
+ */
70
+ export function forcePushData() {
71
+ if (Platform.OS === 'ios') {
72
+ // for ios we have to use this hack, because there isn't separate forcePush function as on android, sending an event with forcePush flag does the same thing
73
+ return logEvent('', new Date().toISOString(), [], true);
74
+ } else return RetenoSdk.forcePushData();
75
+ }
76
+ /**
77
+ * Send log screen view event
78
+ * @param screenName name of the screen
79
+ */
80
+ export function logScreenView(screenName) {
81
+ return logEvent(CustomEventTypes.screenView, new Date().toISOString(), [{
82
+ name: CustomEventTypes.screenView,
83
+ value: screenName
84
+ }]);
85
+ }
46
86
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DeviceEventEmitter","NativeEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","RetenoSdk","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","eventEmitter","android","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,SACEA,kBAAkB,EAClBC,kBAAkB,EAClBC,aAAa,EACbC,QAAQ,QACH,cAAc;AAErB,MAAMC,aAAa,GAChB,kFAAiF,GAClFD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AA4CjC,MAAMC,SAAS,GAAGN,aAAa,CAACM,SAAS,GACrCN,aAAa,CAACM,SAAS,GACvB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,SAASQ,cAAc,CAACC,WAAmB,EAAiB;EACjE,OAAOL,SAAS,CAACI,cAAc,CAACC,WAAW,CAAC;AAC9C;AAEA,OAAO,SAASC,iBAAiB,CAC/BC,OAAiC,EAClB;EACf,IACE,CAACA,OAAO,CAACC,cAAc,IACtBD,OAAO,CAACC,cAAc,IAAID,OAAO,CAACC,cAAc,CAACC,MAAM,KAAK,CAAE,EAC/D;IACA,MAAM,IAAIN,KAAK,CAAC,oCAAoC,CAAC;EACvD;EACA,OAAOH,SAAS,CAACM,iBAAiB,CAACC,OAAO,CAAC;AAC7C;AAEA,OAAO,SAASG,sBAAsB,GAAiB;EACrD,OAAOV,SAAS,CAACU,sBAAsB,EAAE;AAC3C;AAEA,MAAMC,YAAY,GAAGhB,QAAQ,CAACE,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIL,kBAAkB,CAACO,SAAS,CAAC;EACtC;EACAY,OAAO,EAAEpB;AACX,CAAC,CAAC;AAEF,OAAO,SAASqB,+BAA+B,CAC7CC,QAA8B,EAC9B;EACA,OAAOH,YAAY,CAACI,WAAW,CAAC,sBAAsB,EAAED,QAAQ,CAAC;AACnE;AAEA,OAAO,SAASE,QAAQ,CACtBC,SAAiB,EACjBC,IAAY;AACZ;AACAC,UAAkC,EAClCC,SAAmB,EACnB;EACA,OAAOpB,SAAS,CAACgB,QAAQ,CAAC;IACxBC,SAAS;IACTC,IAAI;IACJC,UAAU;IACVC;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,8BAA8B,GAAG;EAC/C,IAAI1B,QAAQ,CAAC2B,EAAE,KAAK,KAAK,EAAE;IACzBtB,SAAS,CAACqB,8BAA8B,EAAE;EAC5C;AACF"}
1
+ {"version":3,"names":["DeviceEventEmitter","NativeEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","CustomEventTypes","RetenoSdk","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","eventEmitter","android","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS","setAnonymousUserAttributes","forcePushData","Date","toISOString","logScreenView","screenName","screenView","name","value"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
+ export declare enum CustomEventTypes {
2
+ screenView = "screenView"
3
+ }
1
4
  export type Address = {
2
5
  region?: string | null;
3
6
  town?: string | null;
@@ -19,6 +22,7 @@ export type UserAttributes = {
19
22
  address?: Address | null;
20
23
  fields?: Fields | null;
21
24
  };
25
+ export type AnonymousUserAttributes = Pick<UserAttributes, 'firstName' | 'lastName' | 'languageCode' | 'timeZone' | 'address' | 'fields'>;
22
26
  export type User = {
23
27
  userAttributes?: UserAttributes | null;
24
28
  subscriptionKeys?: String[] | null;
@@ -37,7 +41,29 @@ export declare function setDeviceToken(deviceToken: string): Promise<void>;
37
41
  export declare function setUserAttributes(payload: SetUserAttributesPayload): Promise<void>;
38
42
  export declare function getInitialNotification(): Promise<any>;
39
43
  export declare function setOnRetenoPushReceivedListener(listener: (event: any) => void): import("react-native").EmitterSubscription;
40
- export declare function logEvent(eventName: string, date: string, parameters: CustomEventParameter[], forcePush?: boolean): any;
44
+ /**
45
+ * Log event
46
+ * @param eventName name of the event
47
+ * @param date date parameter should be in ISO8601 format, e.g new Date().toISOString()
48
+ * @param parameters custom parameters
49
+ * @param forcePush IOS force push
50
+ */
51
+ export declare function logEvent(eventName: string, date: string, parameters: CustomEventParameter[], forcePush?: boolean): Promise<void>;
52
+ /**
53
+ * IOS Only
54
+ */
41
55
  export declare function registerForRemoteNotifications(): void;
56
+ export declare function setAnonymousUserAttributes(payload: AnonymousUserAttributes): Promise<void>;
57
+ /**
58
+ *
59
+ * Reteno caches all events (events, device data, user information, user behavior, screen tracking, push statuses, etc) locally into database
60
+ * Call this function to send all accumulated events
61
+ */
62
+ export declare function forcePushData(): Promise<void>;
63
+ /**
64
+ * Send log screen view event
65
+ * @param screenName name of the screen
66
+ */
67
+ export declare function logScreenView(screenName: string): Promise<void>;
42
68
  export {};
43
69
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,MAAM,GAAG,KAAK,EAAE,CAAC;AAEtB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAaF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,CAErD;AAQD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,8CAG/B;AAED,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EAEZ,UAAU,EAAE,oBAAoB,EAAE,EAClC,SAAS,CAAC,EAAE,OAAO,OAQpB;AAED,wBAAgB,8BAA8B,SAI7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAaA,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,MAAM,GAAG,KAAK,EAAE,CAAC;AAEtB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,cAAc,EACd,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAC9E,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG;IACjB,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAaF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,CAErD;AAQD,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,8CAG/B;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EAEjB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,oBAAoB,EAAE,EAClC,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;GAEG;AACH,wBAAgB,8BAA8B,SAI7C;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAEf;AACD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7C;AACD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,iBAI/C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reteno-react-native-sdk",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "The Reteno React Native SDK for App Analytics and Engagement.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
19
  s.dependency 'React-Core'
20
- s.dependency 'Reteno', '1.6.4'
20
+ s.dependency 'Reteno', '1.6.6'
21
21
 
22
22
  # Don't install the dependencies when we run `pod install` in the old architecture.
23
23
  if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
package/src/index.ts CHANGED
@@ -11,6 +11,10 @@ const LINKING_ERROR =
11
11
  '- You rebuilt the app after installing the package\n' +
12
12
  '- You are not using Expo Go\n';
13
13
 
14
+ export enum CustomEventTypes {
15
+ screenView = 'screenView',
16
+ }
17
+
14
18
  export type Address = {
15
19
  region?: string | null;
16
20
  town?: string | null;
@@ -36,6 +40,11 @@ export type UserAttributes = {
36
40
  fields?: Fields | null;
37
41
  };
38
42
 
43
+ export type AnonymousUserAttributes = Pick<
44
+ UserAttributes,
45
+ 'firstName' | 'lastName' | 'languageCode' | 'timeZone' | 'address' | 'fields'
46
+ >;
47
+
39
48
  export type User = {
40
49
  userAttributes?: UserAttributes | null;
41
50
  subscriptionKeys?: String[] | null;
@@ -96,13 +105,20 @@ export function setOnRetenoPushReceivedListener(
96
105
  return eventEmitter.addListener('reteno-push-received', listener);
97
106
  }
98
107
 
108
+ /**
109
+ * Log event
110
+ * @param eventName name of the event
111
+ * @param date date parameter should be in ISO8601 format, e.g new Date().toISOString()
112
+ * @param parameters custom parameters
113
+ * @param forcePush IOS force push
114
+ */
99
115
  export function logEvent(
100
116
  eventName: string,
101
- date: string,
102
117
  // date parameter should be in ISO8601 format
118
+ date: string,
103
119
  parameters: CustomEventParameter[],
104
120
  forcePush?: boolean
105
- ) {
121
+ ): Promise<void> {
106
122
  return RetenoSdk.logEvent({
107
123
  eventName,
108
124
  date,
@@ -111,8 +127,37 @@ export function logEvent(
111
127
  });
112
128
  }
113
129
 
130
+ /**
131
+ * IOS Only
132
+ */
114
133
  export function registerForRemoteNotifications() {
115
134
  if (Platform.OS === 'ios') {
116
135
  RetenoSdk.registerForRemoteNotifications();
117
136
  }
118
137
  }
138
+
139
+ export function setAnonymousUserAttributes(
140
+ payload: AnonymousUserAttributes
141
+ ): Promise<void> {
142
+ return RetenoSdk.setAnonymousUserAttributes(payload);
143
+ }
144
+ /**
145
+ *
146
+ * Reteno caches all events (events, device data, user information, user behavior, screen tracking, push statuses, etc) locally into database
147
+ * Call this function to send all accumulated events
148
+ */
149
+ export function forcePushData(): Promise<void> {
150
+ if (Platform.OS === 'ios') {
151
+ // for ios we have to use this hack, because there isn't separate forcePush function as on android, sending an event with forcePush flag does the same thing
152
+ return logEvent('', new Date().toISOString(), [], true);
153
+ } else return RetenoSdk.forcePushData();
154
+ }
155
+ /**
156
+ * Send log screen view event
157
+ * @param screenName name of the screen
158
+ */
159
+ export function logScreenView(screenName: string) {
160
+ return logEvent(CustomEventTypes.screenView, new Date().toISOString(), [
161
+ { name: CustomEventTypes.screenView, value: screenName },
162
+ ]);
163
+ }