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.
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/retenosdk/RetenoSdkModule.java +33 -0
- package/android/src/main/java/com/retenosdk/RetenoUserAttributes.java +31 -0
- package/ios/RetenoSdk.m +4 -0
- package/ios/RetenoSdk.swift +12 -0
- package/ios/RetenoSdk.xcodeproj/project.xcworkspace/xcuserdata/oleksiishevchenko.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RetenoSdk.xcodeproj/xcuserdata/oleksiishevchenko.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +6 -0
- package/ios/RetenoUserAttributes.swift +21 -0
- package/lib/commonjs/index.js +47 -2
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +42 -2
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/index.d.ts +27 -1
- 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 -2
package/android/build.gradle
CHANGED
|
@@ -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.
|
|
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
|
package/ios/RetenoSdk.swift
CHANGED
|
@@ -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
|
}
|
|
Binary file
|
|
@@ -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
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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
|
-
|
|
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":"
|
|
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"}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/lib/module/index.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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,
|
|
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
|
@@ -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.
|
|
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
|
+
}
|