reteno-react-native-sdk 1.4.1 → 1.4.8

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.
@@ -11,8 +11,6 @@ buildscript {
11
11
  classpath "com.android.tools.build:gradle:7.2.1"
12
12
  // noinspection DifferentKotlinGradleVersion
13
13
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
14
- // For Firebase Cloud Messaging.
15
- classpath 'com.google.gms:google-services:4.3.14'
16
14
  }
17
15
  }
18
16
 
@@ -74,7 +72,7 @@ dependencies {
74
72
  //noinspection GradleDynamicVersion
75
73
  implementation "com.facebook.react:react-native"
76
74
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
77
- implementation 'com.reteno:fcm:1.6.9'
75
+ implementation 'com.reteno:fcm:2.0.3'
78
76
  implementation "com.google.firebase:firebase-messaging:23.1.0"
79
77
  implementation "com.google.firebase:firebase-messaging-ktx:23.1.0"
80
78
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.2'
@@ -0,0 +1,28 @@
1
+ package com.retenosdk;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import com.google.gson.annotations.SerializedName;
5
+ import com.reteno.core.data.remote.model.recommendation.get.RecomBase;
6
+
7
+ public class RetenoRecommendationsResponse implements RecomBase {
8
+
9
+ @SerializedName("productId")
10
+ private final String productId;
11
+ @SerializedName("descr")
12
+ private final String descr;
13
+
14
+ public RetenoRecommendationsResponse(String productId, String descr) {
15
+ this.productId = productId;
16
+ this.descr = descr;
17
+ }
18
+
19
+ @NonNull
20
+ @Override
21
+ public String getProductId() {
22
+ return productId;
23
+ }
24
+
25
+ public String getDescr() {
26
+ return descr;
27
+ }
28
+ }
@@ -14,12 +14,24 @@ import com.facebook.react.bridge.ReactContext;
14
14
  import com.facebook.react.bridge.ReactContextBaseJavaModule;
15
15
  import com.facebook.react.bridge.ReactMethod;
16
16
  import com.facebook.react.bridge.ReadableMap;
17
+ import com.facebook.react.bridge.ReadableArray;
17
18
  import com.facebook.react.bridge.WritableMap;
18
19
  import com.facebook.react.bridge.WritableNativeMap;
20
+ import com.facebook.react.bridge.WritableArray;
19
21
  import com.facebook.react.modules.core.DeviceEventManagerModule;
20
22
  import com.reteno.core.RetenoApplication;
21
23
  import com.reteno.core.domain.model.user.User;
22
24
  import com.reteno.core.domain.model.user.UserAttributesAnonymous;
25
+ import com.reteno.core.domain.model.recommendation.get.RecomRequest;
26
+ import com.reteno.core.data.remote.model.recommendation.get.Recoms;
27
+ import com.reteno.core.features.recommendation.GetRecommendationResponseCallback;
28
+ import com.reteno.core.domain.model.recommendation.post.RecomEvent;
29
+ import com.reteno.core.domain.model.recommendation.post.RecomEventType;
30
+ import com.reteno.core.domain.model.recommendation.post.RecomEvents;
31
+
32
+ import java.util.ArrayList;
33
+ import java.util.List;
34
+ import java.time.ZonedDateTime;
23
35
 
24
36
  public class RetenoSdkModule extends ReactContextBaseJavaModule {
25
37
  public static final String NAME = "RetenoSdk";
@@ -174,4 +186,125 @@ public class RetenoSdkModule extends ReactContextBaseJavaModule {
174
186
  promise.reject("Reteno Android SDK forcePushData Error", e);
175
187
  }
176
188
  }
189
+
190
+ @ReactMethod
191
+ public void updatePushPermissionStatusAndroid(Promise promise) {
192
+ try {
193
+ ((RetenoApplication) this.context.getCurrentActivity().getApplication())
194
+ .getRetenoInstance().updatePushPermissionStatus();
195
+ promise.resolve(true);
196
+ } catch (Exception e) {
197
+ promise.reject("Reteno Android SDK forcePushData Error", e);
198
+ }
199
+ }
200
+
201
+ private List<String> convertReadableArrayToStringList(ReadableArray array) {
202
+ List<String> list = new ArrayList<>();
203
+ for (int i = 0; i < array.size(); i++) {
204
+ list.add(array.getString(i));
205
+ }
206
+ return list;
207
+ }
208
+
209
+ @ReactMethod
210
+ public void getRecommendations(ReadableMap payload, Promise promise) {
211
+ if (payload == null) {
212
+ promise.reject("PayloadError", "Payload cannot be null");
213
+ return;
214
+ }
215
+
216
+ String recomVariantId = payload.hasKey("recomVariantId") ? payload.getString("recomVariantId") : null;
217
+ ReadableArray productIdsArray = payload.getArray("productIds");
218
+ ReadableArray fieldsArray = payload.getArray("fields");
219
+ String categoryId = payload.hasKey("categoryId") ? payload.getString("categoryId") : null;
220
+
221
+ if (recomVariantId == null || productIdsArray == null || fieldsArray == null) {
222
+ promise.reject("PayloadError", "Required fields are missing in the payload");
223
+ return;
224
+ }
225
+
226
+ List<String> productIds = convertReadableArrayToStringList(productIdsArray);
227
+ List<String> fields = convertReadableArrayToStringList(fieldsArray);
228
+
229
+ RecomRequest request = new RecomRequest(productIds, categoryId, fields, null);
230
+
231
+ ((RetenoApplication) this.context.getCurrentActivity().getApplication())
232
+ .getRetenoInstance().getRecommendation().fetchRecommendation(recomVariantId, request, RetenoRecommendationsResponse.class, new GetRecommendationResponseCallback<RetenoRecommendationsResponse>() {
233
+ @Override
234
+ public void onSuccess(@NonNull Recoms<RetenoRecommendationsResponse> response) {
235
+ List<WritableMap> recoms = new ArrayList<>();
236
+
237
+ for (RetenoRecommendationsResponse recom : response.getRecoms()) {
238
+ WritableMap recomMap = Arguments.createMap();
239
+ recomMap.putString("productId", recom.getProductId());
240
+ recomMap.putString("description", recom.getDescr());
241
+ recoms.add(recomMap);
242
+ }
243
+
244
+ WritableArray recomsArray = Arguments.createArray();
245
+ for (WritableMap map : recoms) {
246
+ recomsArray.pushMap(map);
247
+ }
248
+ promise.resolve(recomsArray);
249
+ }
250
+
251
+ @Override
252
+ public void onSuccessFallbackToJson(@NonNull String response) {
253
+ promise.resolve(response);
254
+ }
255
+
256
+ @Override
257
+ public void onFailure(Integer statusCode, String response, Throwable throwable) {
258
+ promise.reject(String.valueOf(statusCode), response, throwable);
259
+ }
260
+ });
261
+ }
262
+
263
+ @ReactMethod
264
+ public void logRecommendationEvent(ReadableMap payload, Promise promise) {
265
+ if (payload == null) {
266
+ promise.reject("PayloadError", "Payload cannot be null");
267
+ return;
268
+ }
269
+
270
+ String recomVariantId = payload.hasKey("recomVariantId") ? payload.getString("recomVariantId") : null;
271
+ ReadableArray impressionsArray = payload.hasKey("impressions") ? payload.getArray("impressions") : null;
272
+ ReadableArray clicksArray = payload.hasKey("clicks") ? payload.getArray("clicks") : null;
273
+
274
+ if (recomVariantId == null || impressionsArray == null || clicksArray == null) {
275
+ promise.reject("PayloadError", "Required fields are missing in the payload");
276
+ return;
277
+ }
278
+
279
+ try {
280
+ List<RecomEvent> events = new ArrayList<>();
281
+
282
+ for (int i = 0; i < impressionsArray.size(); i++) {
283
+ ReadableMap eventMap = impressionsArray.getMap(i);
284
+ String productId = eventMap.hasKey("productId") ? eventMap.getString("productId") : null;
285
+ if (productId != null) {
286
+ events.add(new RecomEvent(RecomEventType.IMPRESSIONS, ZonedDateTime.now(), productId));
287
+ }
288
+ }
289
+
290
+ for (int i = 0; i < clicksArray.size(); i++) {
291
+ ReadableMap eventMap = clicksArray.getMap(i);
292
+ String productId = eventMap.hasKey("productId") ? eventMap.getString("productId") : null;
293
+ if (productId != null) {
294
+ events.add(new RecomEvent(RecomEventType.CLICKS, ZonedDateTime.now(), productId));
295
+ }
296
+ }
297
+
298
+ RecomEvents recomEvents = new RecomEvents(recomVariantId, events);
299
+
300
+ ((RetenoApplication) this.context.getCurrentActivity().getApplication())
301
+ .getRetenoInstance().getRecommendation().logRecommendations(recomEvents);
302
+
303
+ promise.resolve(true);
304
+ } catch (IllegalArgumentException e) {
305
+ promise.reject("InvalidEventType", "Invalid recommendation event type");
306
+ } catch (Exception e) {
307
+ promise.reject("Reteno Android SDK logRecommendationEvent Error", e);
308
+ }
309
+ }
177
310
  }
@@ -0,0 +1,15 @@
1
+ import Foundation
2
+ import Reteno
3
+
4
+ struct Recommendation: Decodable, RecommendableProduct {
5
+ public let productId: String
6
+ public let name: String
7
+ public let description: String?
8
+ public let imageUrl: URL?
9
+ public let price: Float
10
+
11
+ enum CodingKeys: String, CodingKey {
12
+ case productId, name, description = "descr", imageUrl, price
13
+ }
14
+
15
+ }
package/ios/RetenoSdk.m CHANGED
@@ -24,6 +24,14 @@ RCT_EXTERN_METHOD(setAnonymousUserAttributes:(NSDictionary*)payload
24
24
  withResolver:(RCTPromiseResolveBlock)resolve
25
25
  withRejecter:(RCTPromiseRejectBlock)reject)
26
26
 
27
+ RCT_EXTERN_METHOD(getRecommendations:(NSDictionary*)payload
28
+ withResolver:(RCTPromiseResolveBlock)resolve
29
+ withRejecter:(RCTPromiseRejectBlock)reject)
30
+
31
+ RCT_EXTERN_METHOD(logRecommendationEvent:(NSDictionary*)payload
32
+ withResolver:(RCTPromiseResolveBlock)resolve
33
+ withRejecter:(RCTPromiseRejectBlock)reject)
34
+
27
35
  RCT_EXTERN_METHOD(supportedEvents)
28
36
 
29
37
  + (BOOL)requiresMainQueueSetup
@@ -98,4 +98,80 @@ open class RetenoSdk: RCTEventEmitter {
98
98
  reject("100", "Reteno iOS SDK setAnonymousUserAttributes Error", error);
99
99
  }
100
100
  }
101
+
102
+ @objc(getRecommendations:withResolver:withRejecter:)
103
+ func getRecommendations(payload: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
104
+ guard let recomVariantId = payload["recomVariantId"] as? String,
105
+ let productIds = payload["productIds"] as? [String],
106
+ let categoryId = payload["categoryId"] as? String,
107
+ let filters = payload["filters"] as? [NSDictionary],
108
+ let fields = payload["fields"] as? [String] else {
109
+ let error = NSError(domain: "RetenoSdk", code: 100, userInfo: [NSLocalizedDescriptionKey: "Invalid payload"])
110
+ reject("100", "Reteno iOS SDK Error: Invalid payload", error)
111
+ return
112
+ }
113
+
114
+ var recomFilters: [RecomFilter]? = nil
115
+ if let filters = filters as? [[String: Any]] {
116
+ recomFilters = filters.compactMap { dict in
117
+ guard let name = dict["name"] as? String, let values = dict["values"] as? [String] else {
118
+ return nil
119
+ }
120
+ return RecomFilter(name: name, values: values)
121
+ }
122
+ }
123
+
124
+ Reteno.recommendations().getRecoms(recomVariantId: recomVariantId, productIds: productIds, categoryId: categoryId, filters: recomFilters, fields: fields) { (result: Result<[Recommendation], Error>) in
125
+
126
+ switch result {
127
+ case .success(let recommendations):
128
+ let serializedRecommendations = recommendations.map { recommendation in
129
+ return [
130
+ "productId": recommendation.productId,
131
+ "name": recommendation.name,
132
+ "description": recommendation.description ?? "",
133
+ "imageUrl": recommendation.imageUrl?.absoluteString ?? "",
134
+ "price": recommendation.price
135
+ ]
136
+ }
137
+ resolve(serializedRecommendations)
138
+
139
+ case .failure(let error):
140
+ reject("100", "Reteno iOS SDK getRecommendations Error", error)
141
+ }
142
+ }
143
+ }
144
+
145
+ @objc(logRecommendationEvent:withResolver:withRejecter:)
146
+ func logRecommendationEvent(payload: NSDictionary, resolve:RCTPromiseResolveBlock, reject:RCTPromiseRejectBlock) -> Void {
147
+
148
+ guard let recomVariantId = payload["recomVariantId"] as? String,
149
+ let impressions = payload["impressions"] as? [[String: Any]],
150
+ let clicks = payload["clicks"] as? [[String: Any]],
151
+ let forcePush = payload["forcePush"] as? Bool else {
152
+ let error = NSError(domain: "InvalidPayload", code: 0, userInfo: [NSLocalizedDescriptionKey: "Invalid payload"])
153
+ reject("100", "Reteno iOS SDK logRecommendationEvent Error", error)
154
+ return
155
+ }
156
+
157
+ var impressionEvents: [RecomEvent] = []
158
+ var clickEvents: [RecomEvent] = []
159
+
160
+ for impression in impressions {
161
+ let productId = impression["productId"] as? String
162
+
163
+ impressionEvents.append(RecomEvent(date: Date(), productId: productId ?? ""))
164
+ }
165
+
166
+ for click in clicks {
167
+ let productId = click["productId"] as? String
168
+
169
+ clickEvents.append(RecomEvent(date: Date(), productId: productId ?? ""))
170
+ }
171
+
172
+ Reteno.recommendations().logEvent(recomVariantId: recomVariantId, impressions: impressionEvents, clicks: clickEvents, forcePush: forcePush)
173
+
174
+ let res: [String: Bool] = ["success": true]
175
+ resolve(res)
176
+ }
101
177
  }
@@ -6,13 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.CustomEventTypes = void 0;
7
7
  exports.forcePushData = forcePushData;
8
8
  exports.getInitialNotification = getInitialNotification;
9
+ exports.getRecommendations = getRecommendations;
9
10
  exports.logEvent = logEvent;
11
+ exports.logRecommendationEvent = logRecommendationEvent;
10
12
  exports.logScreenView = logScreenView;
11
13
  exports.registerForRemoteNotifications = registerForRemoteNotifications;
12
14
  exports.setAnonymousUserAttributes = setAnonymousUserAttributes;
13
15
  exports.setDeviceToken = setDeviceToken;
14
16
  exports.setOnRetenoPushReceivedListener = setOnRetenoPushReceivedListener;
15
17
  exports.setUserAttributes = setUserAttributes;
18
+ exports.updatePushPermissionStatusAndroid = updatePushPermissionStatusAndroid;
16
19
  var _reactNative = require("react-native");
17
20
  const LINKING_ERROR = `The package 'reteno-react-native-sdk' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
18
21
  ios: "- You have run 'pod install'\n",
@@ -40,6 +43,12 @@ function setUserAttributes(payload) {
40
43
  function getInitialNotification() {
41
44
  return RetenoSdk.getInitialNotification();
42
45
  }
46
+ function getRecommendations(payload) {
47
+ return RetenoSdk.getRecommendations(payload);
48
+ }
49
+ function logRecommendationEvent(payload) {
50
+ return RetenoSdk.logRecommendationEvent(payload);
51
+ }
43
52
  const eventEmitter = _reactNative.Platform.select({
44
53
  ios: new _reactNative.NativeEventEmitter(RetenoSdk),
45
54
  // @ts-ignore
@@ -99,4 +108,19 @@ function logScreenView(screenName) {
99
108
  value: screenName
100
109
  }]);
101
110
  }
111
+
112
+ /**
113
+ *
114
+ * Android only
115
+ *
116
+ * Since Android 13 was released you have to make sure you are handling Notification runtime permissions
117
+ *
118
+ * When user accepts permission, you have to call updatePushPermissionStatus() function from Reteno interface to notify the Reteno SDK that user has granted the permission.
119
+ */
120
+ function updatePushPermissionStatusAndroid() {
121
+ if (_reactNative.Platform.OS === 'android') {
122
+ return RetenoSdk.updatePushPermissionStatusAndroid();
123
+ }
124
+ return Promise.resolve(undefined);
125
+ }
102
126
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"names":["LINKING_ERROR","Platform","select","ios","default","CustomEventTypes","RetenoSdk","NativeModules","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","getRecommendations","logRecommendationEvent","eventEmitter","NativeEventEmitter","android","DeviceEventEmitter","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS","setAnonymousUserAttributes","forcePushData","Date","toISOString","logScreenView","screenName","screenView","name","value","updatePushPermissionStatusAndroid","Promise","resolve","undefined"],"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;AAuE5B,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;AAEO,SAASC,kBAAkB,CAChCJ,OAA+B,EACjB;EACd,OAAOR,SAAS,CAACY,kBAAkB,CAACJ,OAAO,CAAC;AAC9C;AAEO,SAASK,sBAAsB,CACpCL,OAAmC,EACpB;EACf,OAAOR,SAAS,CAACa,sBAAsB,CAACL,OAAO,CAAC;AAClD;AAEA,MAAMM,YAAY,GAAGnB,qBAAQ,CAACC,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIkB,+BAAkB,CAACf,SAAS,CAAC;EACtC;EACAgB,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,OAAOzB,SAAS,CAACqB,QAAQ,CAAC;IACxBC,SAAS;IACTC,IAAI;IACJC,UAAU;IACVC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,SAASC,8BAA8B,GAAG;EAC/C,IAAI/B,qBAAQ,CAACgC,EAAE,KAAK,KAAK,EAAE;IACzB3B,SAAS,CAAC0B,8BAA8B,EAAE;EAC5C;AACF;AAEO,SAASE,0BAA0B,CACxCpB,OAAgC,EACjB;EACf,OAAOR,SAAS,CAAC4B,0BAA0B,CAACpB,OAAO,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACO,SAASqB,aAAa,GAAkB;EAC7C,IAAIlC,qBAAQ,CAACgC,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,OAAO/B,SAAS,CAAC6B,aAAa,EAAE;AACzC;AACA;AACA;AACA;AACA;AACO,SAASG,aAAa,CAACC,UAAkB,EAAE;EAChD,OAAOZ,QAAQ,CAACtB,gBAAgB,CAACmC,UAAU,EAAE,IAAIJ,IAAI,EAAE,CAACC,WAAW,EAAE,EAAE,CACrE;IAAEI,IAAI,EAAEpC,gBAAgB,CAACmC,UAAU;IAAEE,KAAK,EAAEH;EAAW,CAAC,CACzD,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,iCAAiC,GAAkB;EACjE,IAAI1C,qBAAQ,CAACgC,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAO3B,SAAS,CAACqC,iCAAiC,EAAE;EACtD;EACA,OAAOC,OAAO,CAACC,OAAO,CAACC,SAAS,CAAC;AACnC"}
@@ -24,6 +24,12 @@ export function setUserAttributes(payload) {
24
24
  export function getInitialNotification() {
25
25
  return RetenoSdk.getInitialNotification();
26
26
  }
27
+ export function getRecommendations(payload) {
28
+ return RetenoSdk.getRecommendations(payload);
29
+ }
30
+ export function logRecommendationEvent(payload) {
31
+ return RetenoSdk.logRecommendationEvent(payload);
32
+ }
27
33
  const eventEmitter = Platform.select({
28
34
  ios: new NativeEventEmitter(RetenoSdk),
29
35
  // @ts-ignore
@@ -83,4 +89,19 @@ export function logScreenView(screenName) {
83
89
  value: screenName
84
90
  }]);
85
91
  }
92
+
93
+ /**
94
+ *
95
+ * Android only
96
+ *
97
+ * Since Android 13 was released you have to make sure you are handling Notification runtime permissions
98
+ *
99
+ * When user accepts permission, you have to call updatePushPermissionStatus() function from Reteno interface to notify the Reteno SDK that user has granted the permission.
100
+ */
101
+ export function updatePushPermissionStatusAndroid() {
102
+ if (Platform.OS === 'android') {
103
+ return RetenoSdk.updatePushPermissionStatusAndroid();
104
+ }
105
+ return Promise.resolve(undefined);
106
+ }
86
107
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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
+ {"version":3,"names":["DeviceEventEmitter","NativeEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","CustomEventTypes","RetenoSdk","Proxy","get","Error","setDeviceToken","deviceToken","setUserAttributes","payload","externalUserId","length","getInitialNotification","getRecommendations","logRecommendationEvent","eventEmitter","android","setOnRetenoPushReceivedListener","listener","addListener","logEvent","eventName","date","parameters","forcePush","registerForRemoteNotifications","OS","setAnonymousUserAttributes","forcePushData","Date","toISOString","logScreenView","screenName","screenView","name","value","updatePushPermissionStatusAndroid","Promise","resolve","undefined"],"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;AAEjC,WAAYC,gBAAgB;AAE3B,WAFWA,gBAAgB;EAAhBA,gBAAgB;AAAA,GAAhBA,gBAAgB,KAAhBA,gBAAgB;AAuE5B,MAAMC,SAAS,GAAGP,aAAa,CAACO,SAAS,GACrCP,aAAa,CAACO,SAAS,GACvB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACR,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAEL,OAAO,SAASS,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,OAAO,SAASC,kBAAkB,CAChCJ,OAA+B,EACjB;EACd,OAAOP,SAAS,CAACW,kBAAkB,CAACJ,OAAO,CAAC;AAC9C;AAEA,OAAO,SAASK,sBAAsB,CACpCL,OAAmC,EACpB;EACf,OAAOP,SAAS,CAACY,sBAAsB,CAACL,OAAO,CAAC;AAClD;AAEA,MAAMM,YAAY,GAAGnB,QAAQ,CAACE,MAAM,CAAC;EACnCC,GAAG,EAAE,IAAIL,kBAAkB,CAACQ,SAAS,CAAC;EACtC;EACAc,OAAO,EAAEvB;AACX,CAAC,CAAC;AAEF,OAAO,SAASwB,+BAA+B,CAC7CC,QAA8B,EAC9B;EACA,OAAOH,YAAY,CAACI,WAAW,CAAC,sBAAsB,EAAED,QAAQ,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,QAAQ,CACtBC,SAAiB;AACjB;AACAC,IAAY,EACZC,UAAkC,EAClCC,SAAmB,EACJ;EACf,OAAOtB,SAAS,CAACkB,QAAQ,CAAC;IACxBC,SAAS;IACTC,IAAI;IACJC,UAAU;IACVC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,OAAO,SAASC,8BAA8B,GAAG;EAC/C,IAAI7B,QAAQ,CAAC8B,EAAE,KAAK,KAAK,EAAE;IACzBxB,SAAS,CAACuB,8BAA8B,EAAE;EAC5C;AACF;AAEA,OAAO,SAASE,0BAA0B,CACxClB,OAAgC,EACjB;EACf,OAAOP,SAAS,CAACyB,0BAA0B,CAAClB,OAAO,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASmB,aAAa,GAAkB;EAC7C,IAAIhC,QAAQ,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,OAAO5B,SAAS,CAAC0B,aAAa,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,aAAa,CAACC,UAAkB,EAAE;EAChD,OAAOZ,QAAQ,CAACnB,gBAAgB,CAACgC,UAAU,EAAE,IAAIJ,IAAI,EAAE,CAACC,WAAW,EAAE,EAAE,CACrE;IAAEI,IAAI,EAAEjC,gBAAgB,CAACgC,UAAU;IAAEE,KAAK,EAAEH;EAAW,CAAC,CACzD,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,iCAAiC,GAAkB;EACjE,IAAIxC,QAAQ,CAAC8B,EAAE,KAAK,SAAS,EAAE;IAC7B,OAAOxB,SAAS,CAACkC,iCAAiC,EAAE;EACtD;EACA,OAAOC,OAAO,CAACC,OAAO,CAACC,SAAS,CAAC;AACnC"}
@@ -37,9 +37,29 @@ export type CustomEventParameter = {
37
37
  name: string;
38
38
  value?: string;
39
39
  };
40
+ export type RecommendationsPayload = {
41
+ recomVariantId: string;
42
+ productIds: string[];
43
+ categoryId: string;
44
+ filters?: {
45
+ [key: string]: any;
46
+ }[];
47
+ fields: string[];
48
+ };
49
+ export type RecommendationEvent = {
50
+ productId: string;
51
+ };
52
+ export type RecommendationEventPayload = {
53
+ recomVariantId: string;
54
+ impressions: RecommendationEvent[];
55
+ clicks: RecommendationEvent[];
56
+ forcePush?: boolean;
57
+ };
40
58
  export declare function setDeviceToken(deviceToken: string): Promise<void>;
41
59
  export declare function setUserAttributes(payload: SetUserAttributesPayload): Promise<void>;
42
60
  export declare function getInitialNotification(): Promise<any>;
61
+ export declare function getRecommendations(payload: RecommendationsPayload): Promise<any>;
62
+ export declare function logRecommendationEvent(payload: RecommendationEventPayload): Promise<void>;
43
63
  export declare function setOnRetenoPushReceivedListener(listener: (event: any) => void): import("react-native").EmitterSubscription;
44
64
  /**
45
65
  * Log event
@@ -65,5 +85,14 @@ export declare function forcePushData(): Promise<void>;
65
85
  * @param screenName name of the screen
66
86
  */
67
87
  export declare function logScreenView(screenName: string): Promise<void>;
88
+ /**
89
+ *
90
+ * Android only
91
+ *
92
+ * Since Android 13 was released you have to make sure you are handling Notification runtime permissions
93
+ *
94
+ * When user accepts permission, you have to call updatePushPermissionStatus() function from Reteno interface to notify the Reteno SDK that user has granted the permission.
95
+ */
96
+ export declare function updatePushPermissionStatusAndroid(): Promise<void>;
68
97
  export {};
69
98
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reteno-react-native-sdk",
3
- "version": "1.4.1",
3
+ "version": "1.4.8",
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.7.0'
20
+ s.dependency 'Reteno', '2.0.3'
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
@@ -62,6 +62,26 @@ export type CustomEventParameter = {
62
62
  value?: string;
63
63
  };
64
64
 
65
+ export type RecommendationsPayload = {
66
+ recomVariantId: string;
67
+ productIds: string[];
68
+ categoryId: string;
69
+ filters?: { [key: string]: any }[];
70
+ fields: string[];
71
+ };
72
+
73
+ export type RecommendationEvent = {
74
+ productId: string;
75
+ };
76
+
77
+ export type RecommendationEventPayload = {
78
+ recomVariantId: string;
79
+ impressions: RecommendationEvent[];
80
+ clicks: RecommendationEvent[];
81
+ // forcePush is only for IOS
82
+ forcePush?: boolean;
83
+ };
84
+
65
85
  const RetenoSdk = NativeModules.RetenoSdk
66
86
  ? NativeModules.RetenoSdk
67
87
  : new Proxy(
@@ -93,6 +113,18 @@ export function getInitialNotification(): Promise<any> {
93
113
  return RetenoSdk.getInitialNotification();
94
114
  }
95
115
 
116
+ export function getRecommendations(
117
+ payload: RecommendationsPayload
118
+ ): Promise<any> {
119
+ return RetenoSdk.getRecommendations(payload);
120
+ }
121
+
122
+ export function logRecommendationEvent(
123
+ payload: RecommendationEventPayload
124
+ ): Promise<void> {
125
+ return RetenoSdk.logRecommendationEvent(payload);
126
+ }
127
+
96
128
  const eventEmitter = Platform.select({
97
129
  ios: new NativeEventEmitter(RetenoSdk),
98
130
  // @ts-ignore
@@ -161,3 +193,18 @@ export function logScreenView(screenName: string) {
161
193
  { name: CustomEventTypes.screenView, value: screenName },
162
194
  ]);
163
195
  }
196
+
197
+ /**
198
+ *
199
+ * Android only
200
+ *
201
+ * Since Android 13 was released you have to make sure you are handling Notification runtime permissions
202
+ *
203
+ * When user accepts permission, you have to call updatePushPermissionStatus() function from Reteno interface to notify the Reteno SDK that user has granted the permission.
204
+ */
205
+ export function updatePushPermissionStatusAndroid(): Promise<void> {
206
+ if (Platform.OS === 'android') {
207
+ return RetenoSdk.updatePushPermissionStatusAndroid();
208
+ }
209
+ return Promise.resolve(undefined);
210
+ }
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Workspace
3
- version = "1.0">
4
- <FileRef
5
- location = "self:">
6
- </FileRef>
7
- </Workspace>
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>IDEDidComputeMac32BitWarning</key>
6
- <true/>
7
- </dict>
8
- </plist>
@@ -1,88 +0,0 @@
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
- <Breakpoints>
7
- <BreakpointProxy
8
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
9
- <BreakpointContent
10
- uuid = "7A9426F6-74F5-4DA7-88B5-21C9D83F6B42"
11
- shouldBeEnabled = "Yes"
12
- ignoreCount = "0"
13
- continueAfterRunningActions = "No"
14
- filePath = "RetenoUserAttributes.swift"
15
- startingColumnNumber = "9223372036854775807"
16
- endingColumnNumber = "9223372036854775807"
17
- startingLineNumber = "58"
18
- endingLineNumber = "58"
19
- landmarkName = "init(dictionary:)"
20
- landmarkType = "7">
21
- </BreakpointContent>
22
- </BreakpointProxy>
23
- <BreakpointProxy
24
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
25
- <BreakpointContent
26
- uuid = "88143E6B-DD1B-4E5D-BBF6-71B5B23ADE2C"
27
- shouldBeEnabled = "Yes"
28
- ignoreCount = "0"
29
- continueAfterRunningActions = "No"
30
- filePath = "RetenoUserAttributes.swift"
31
- startingColumnNumber = "9223372036854775807"
32
- endingColumnNumber = "9223372036854775807"
33
- startingLineNumber = "59"
34
- endingLineNumber = "59"
35
- landmarkName = "init(dictionary:)"
36
- landmarkType = "7">
37
- </BreakpointContent>
38
- </BreakpointProxy>
39
- <BreakpointProxy
40
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
41
- <BreakpointContent
42
- uuid = "FB43EC20-7427-469F-B564-CD145C42C109"
43
- shouldBeEnabled = "Yes"
44
- ignoreCount = "0"
45
- continueAfterRunningActions = "No"
46
- filePath = "RetenoUserAttributes.swift"
47
- startingColumnNumber = "9223372036854775807"
48
- endingColumnNumber = "9223372036854775807"
49
- startingLineNumber = "62"
50
- endingLineNumber = "62"
51
- landmarkName = "init(dictionary:)"
52
- landmarkType = "7">
53
- </BreakpointContent>
54
- </BreakpointProxy>
55
- <BreakpointProxy
56
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
57
- <BreakpointContent
58
- uuid = "A3654F32-CF73-4A70-AC2D-4036964D5A10"
59
- shouldBeEnabled = "Yes"
60
- ignoreCount = "0"
61
- continueAfterRunningActions = "No"
62
- filePath = "RetenoUserAttributes.swift"
63
- startingColumnNumber = "9223372036854775807"
64
- endingColumnNumber = "9223372036854775807"
65
- startingLineNumber = "63"
66
- endingLineNumber = "63"
67
- landmarkName = "init(dictionary:)"
68
- landmarkType = "7">
69
- </BreakpointContent>
70
- </BreakpointProxy>
71
- <BreakpointProxy
72
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
73
- <BreakpointContent
74
- uuid = "BD3FA7DF-66A9-4195-93E8-2158B08ED8FC"
75
- shouldBeEnabled = "Yes"
76
- ignoreCount = "0"
77
- continueAfterRunningActions = "No"
78
- filePath = "RetenoUserAttributes.swift"
79
- startingColumnNumber = "9223372036854775807"
80
- endingColumnNumber = "9223372036854775807"
81
- startingLineNumber = "65"
82
- endingLineNumber = "65"
83
- landmarkName = "init(dictionary:)"
84
- landmarkType = "7">
85
- </BreakpointContent>
86
- </BreakpointProxy>
87
- </Breakpoints>
88
- </Bucket>
@@ -1,14 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>RetenoSdk.xcscheme_^#shared#^_</key>
8
- <dict>
9
- <key>orderHint</key>
10
- <integer>0</integer>
11
- </dict>
12
- </dict>
13
- </dict>
14
- </plist>