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.
- package/android/build.gradle +1 -3
- package/android/src/main/java/com/retenosdk/RetenoRecommendationsResponse.java +28 -0
- package/android/src/main/java/com/retenosdk/RetenoSdkModule.java +133 -0
- package/ios/RetenoRecommendations.swift +15 -0
- package/ios/RetenoSdk.m +8 -0
- package/ios/RetenoSdk.swift +76 -0
- package/lib/commonjs/index.js +24 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +21 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +29 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/reteno-react-native-sdk.podspec +1 -1
- package/src/index.ts +47 -0
- package/ios/RetenoSdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RetenoSdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/RetenoSdk.xcodeproj/project.xcworkspace/xcuserdata/oleksiishevchenko.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RetenoSdk.xcodeproj/xcuserdata/oleksiishevchenko.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -88
- package/ios/RetenoSdk.xcodeproj/xcuserdata/oleksiishevchenko.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
package/android/build.gradle
CHANGED
|
@@ -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:
|
|
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
|
package/ios/RetenoSdk.swift
CHANGED
|
@@ -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
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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":"
|
|
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":"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"}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
package/lib/module/index.js.map
CHANGED
|
@@ -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":"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;
|
|
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":"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"}
|
|
@@ -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
|
@@ -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', '
|
|
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
|
+
}
|
|
Binary file
|
|
@@ -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>
|