@attentive-mobile/attentive-react-native-sdk 2.0.0-beta.1 → 2.0.0-beta.3
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/ios/AttentiveReactNativeSdk.mm +22 -21
- package/ios/AttentiveReactNativeSdk.xcodeproj/project.pbxproj +61 -2
- package/ios/AttentiveReactNativeSdk.xcworkspace/contents.xcworkspacedata +10 -0
- package/ios/Bridging/ATTNNativeSDK.swift +108 -13
- package/ios/Podfile +1 -1
- package/ios/PrivacyInfo.xcprivacy +37 -0
- package/package.json +1 -1
|
@@ -181,27 +181,6 @@ customIdentifiers:(NSDictionary *)customIdentifiers {
|
|
|
181
181
|
[_sdk handlePushOpenFromRN:userInfo authorizationStatus:authorizationStatus];
|
|
182
182
|
}
|
|
183
183
|
|
|
184
|
-
// Helper method to convert string to UNAuthorizationStatus
|
|
185
|
-
- (UNAuthorizationStatus)authorizationStatusFromString:(NSString *)statusString {
|
|
186
|
-
if ([statusString isEqualToString:@"authorized"]) {
|
|
187
|
-
return UNAuthorizationStatusAuthorized;
|
|
188
|
-
} else if ([statusString isEqualToString:@"denied"]) {
|
|
189
|
-
return UNAuthorizationStatusDenied;
|
|
190
|
-
} else if ([statusString isEqualToString:@"notDetermined"]) {
|
|
191
|
-
return UNAuthorizationStatusNotDetermined;
|
|
192
|
-
} else if ([statusString isEqualToString:@"provisional"]) {
|
|
193
|
-
if (@available(iOS 12.0, *)) {
|
|
194
|
-
return UNAuthorizationStatusProvisional;
|
|
195
|
-
}
|
|
196
|
-
return UNAuthorizationStatusNotDetermined;
|
|
197
|
-
} else if ([statusString isEqualToString:@"ephemeral"]) {
|
|
198
|
-
if (@available(iOS 14.0, *)) {
|
|
199
|
-
return UNAuthorizationStatusEphemeral;
|
|
200
|
-
}
|
|
201
|
-
return UNAuthorizationStatusNotDetermined;
|
|
202
|
-
}
|
|
203
|
-
return UNAuthorizationStatusNotDetermined;
|
|
204
|
-
}
|
|
205
184
|
|
|
206
185
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
207
186
|
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
@@ -334,6 +313,28 @@ customIdentifiers:(NSDictionary *)customIdentifiers {
|
|
|
334
313
|
}
|
|
335
314
|
#endif
|
|
336
315
|
|
|
316
|
+
|
|
317
|
+
// Helper method to convert string to UNAuthorizationStatus
|
|
318
|
+
- (UNAuthorizationStatus)authorizationStatusFromString:(NSString *)statusString {
|
|
319
|
+
if ([statusString isEqualToString:@"authorized"]) {
|
|
320
|
+
return UNAuthorizationStatusAuthorized;
|
|
321
|
+
} else if ([statusString isEqualToString:@"denied"]) {
|
|
322
|
+
return UNAuthorizationStatusDenied;
|
|
323
|
+
} else if ([statusString isEqualToString:@"notDetermined"]) {
|
|
324
|
+
return UNAuthorizationStatusNotDetermined;
|
|
325
|
+
} else if ([statusString isEqualToString:@"provisional"]) {
|
|
326
|
+
if (@available(iOS 12.0, *)) {
|
|
327
|
+
return UNAuthorizationStatusProvisional;
|
|
328
|
+
}
|
|
329
|
+
return UNAuthorizationStatusNotDetermined;
|
|
330
|
+
} else if ([statusString isEqualToString:@"ephemeral"]) {
|
|
331
|
+
if (@available(iOS 14.0, *)) {
|
|
332
|
+
return UNAuthorizationStatusEphemeral;
|
|
333
|
+
}
|
|
334
|
+
return UNAuthorizationStatusNotDetermined;
|
|
335
|
+
}
|
|
336
|
+
return UNAuthorizationStatusNotDetermined;
|
|
337
|
+
}
|
|
337
338
|
- (void)triggerCreative:(NSString *)creativeId {
|
|
338
339
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
339
340
|
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
/* Begin PBXBuildFile section */
|
|
10
10
|
58F287A429D7860100C7DF09 /* AttentiveReactNativeSdk.mm in Sources */ = {isa = PBXBuildFile; fileRef = 58F2879D29D7860000C7DF09 /* AttentiveReactNativeSdk.mm */; };
|
|
11
|
+
7FC30FA61B6E0426001A4BCC /* libPods-AttentiveReactNativeSdk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6CABAEF39FD802FFF9317045 /* libPods-AttentiveReactNativeSdk.a */; };
|
|
11
12
|
FBED3EEA2C2F3F3900E7D5EB /* ATTNNativeSDK.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBED3EE92C2F3F3900E7D5EB /* ATTNNativeSDK.swift */; };
|
|
13
|
+
5C622475A2F0B4C034C942DD /* AttentiveSDKManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A0D5612CE7FA50664CB37B /* AttentiveSDKManager.swift */; };
|
|
12
14
|
/* End PBXBuildFile section */
|
|
13
15
|
|
|
14
16
|
/* Begin PBXCopyFilesBuildPhase section */
|
|
@@ -25,11 +27,15 @@
|
|
|
25
27
|
|
|
26
28
|
/* Begin PBXFileReference section */
|
|
27
29
|
134814201AA4EA6300B7C361 /* libAttentiveReactNativeSdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAttentiveReactNativeSdk.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
30
|
+
33355F3FC1852AA82C07D693 /* Pods-AttentiveReactNativeSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttentiveReactNativeSdk.debug.xcconfig"; path = "Target Support Files/Pods-AttentiveReactNativeSdk/Pods-AttentiveReactNativeSdk.debug.xcconfig"; sourceTree = "<group>"; };
|
|
28
31
|
58F2879C29D7860000C7DF09 /* attentive-sdk-umbrella.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "attentive-sdk-umbrella.h"; sourceTree = "<group>"; };
|
|
29
32
|
58F2879D29D7860000C7DF09 /* AttentiveReactNativeSdk.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AttentiveReactNativeSdk.mm; sourceTree = "<group>"; };
|
|
33
|
+
6CABAEF39FD802FFF9317045 /* libPods-AttentiveReactNativeSdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AttentiveReactNativeSdk.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
34
|
+
949D2E1F5D8BA4C00733B1FD /* Pods-AttentiveReactNativeSdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttentiveReactNativeSdk.release.xcconfig"; path = "Target Support Files/Pods-AttentiveReactNativeSdk/Pods-AttentiveReactNativeSdk.release.xcconfig"; sourceTree = "<group>"; };
|
|
30
35
|
B3E7B5881CC2AC0600A0062D /* AttentiveReactNativeSdk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttentiveReactNativeSdk.h; sourceTree = "<group>"; };
|
|
31
36
|
FBED3EE82C2F3F3900E7D5EB /* AttentiveReactNativeSdk-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AttentiveReactNativeSdk-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
32
37
|
FBED3EE92C2F3F3900E7D5EB /* ATTNNativeSDK.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATTNNativeSDK.swift; sourceTree = "<group>"; };
|
|
38
|
+
68A0D5612CE7FA50664CB37B /* AttentiveSDKManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttentiveSDKManager.swift; sourceTree = "<group>"; };
|
|
33
39
|
FBED3EEB2C2F413D00E7D5EB /* attentive-react-native-sdk.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; name = "attentive-react-native-sdk.podspec"; path = "../attentive-react-native-sdk.podspec"; sourceTree = "<group>"; };
|
|
34
40
|
/* End PBXFileReference section */
|
|
35
41
|
|
|
@@ -38,6 +44,7 @@
|
|
|
38
44
|
isa = PBXFrameworksBuildPhase;
|
|
39
45
|
buildActionMask = 2147483647;
|
|
40
46
|
files = (
|
|
47
|
+
7FC30FA61B6E0426001A4BCC /* libPods-AttentiveReactNativeSdk.a in Frameworks */,
|
|
41
48
|
);
|
|
42
49
|
runOnlyForDeploymentPostprocessing = 0;
|
|
43
50
|
};
|
|
@@ -52,6 +59,14 @@
|
|
|
52
59
|
name = Products;
|
|
53
60
|
sourceTree = "<group>";
|
|
54
61
|
};
|
|
62
|
+
45BE13C5EF781B9439E0E17D /* Frameworks */ = {
|
|
63
|
+
isa = PBXGroup;
|
|
64
|
+
children = (
|
|
65
|
+
6CABAEF39FD802FFF9317045 /* libPods-AttentiveReactNativeSdk.a */,
|
|
66
|
+
);
|
|
67
|
+
name = Frameworks;
|
|
68
|
+
sourceTree = "<group>";
|
|
69
|
+
};
|
|
55
70
|
58B511D21A9E6C8500147676 = {
|
|
56
71
|
isa = PBXGroup;
|
|
57
72
|
children = (
|
|
@@ -62,12 +77,15 @@
|
|
|
62
77
|
58F2879D29D7860000C7DF09 /* AttentiveReactNativeSdk.mm */,
|
|
63
78
|
134814211AA4EA7D00B7C361 /* Products */,
|
|
64
79
|
5F65DBE5DB1751003CF3E431 /* Pods */,
|
|
80
|
+
45BE13C5EF781B9439E0E17D /* Frameworks */,
|
|
65
81
|
);
|
|
66
82
|
sourceTree = "<group>";
|
|
67
83
|
};
|
|
68
84
|
5F65DBE5DB1751003CF3E431 /* Pods */ = {
|
|
69
85
|
isa = PBXGroup;
|
|
70
86
|
children = (
|
|
87
|
+
33355F3FC1852AA82C07D693 /* Pods-AttentiveReactNativeSdk.debug.xcconfig */,
|
|
88
|
+
949D2E1F5D8BA4C00733B1FD /* Pods-AttentiveReactNativeSdk.release.xcconfig */,
|
|
71
89
|
);
|
|
72
90
|
path = Pods;
|
|
73
91
|
sourceTree = "<group>";
|
|
@@ -76,6 +94,7 @@
|
|
|
76
94
|
isa = PBXGroup;
|
|
77
95
|
children = (
|
|
78
96
|
FBED3EE92C2F3F3900E7D5EB /* ATTNNativeSDK.swift */,
|
|
97
|
+
68A0D5612CE7FA50664CB37B /* AttentiveSDKManager.swift */,
|
|
79
98
|
FBED3EE82C2F3F3900E7D5EB /* AttentiveReactNativeSdk-Bridging-Header.h */,
|
|
80
99
|
);
|
|
81
100
|
path = Bridging;
|
|
@@ -88,6 +107,7 @@
|
|
|
88
107
|
isa = PBXNativeTarget;
|
|
89
108
|
buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "AttentiveReactNativeSdk" */;
|
|
90
109
|
buildPhases = (
|
|
110
|
+
75E06E153E35C6A0B50E809C /* [CP] Check Pods Manifest.lock */,
|
|
91
111
|
58B511D71A9E6C8500147676 /* Sources */,
|
|
92
112
|
58B511D81A9E6C8500147676 /* Frameworks */,
|
|
93
113
|
58B511D91A9E6C8500147676 /* CopyFiles */,
|
|
@@ -134,12 +154,38 @@
|
|
|
134
154
|
};
|
|
135
155
|
/* End PBXProject section */
|
|
136
156
|
|
|
157
|
+
/* Begin PBXShellScriptBuildPhase section */
|
|
158
|
+
75E06E153E35C6A0B50E809C /* [CP] Check Pods Manifest.lock */ = {
|
|
159
|
+
isa = PBXShellScriptBuildPhase;
|
|
160
|
+
buildActionMask = 2147483647;
|
|
161
|
+
files = (
|
|
162
|
+
);
|
|
163
|
+
inputFileListPaths = (
|
|
164
|
+
);
|
|
165
|
+
inputPaths = (
|
|
166
|
+
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
167
|
+
"${PODS_ROOT}/Manifest.lock",
|
|
168
|
+
);
|
|
169
|
+
name = "[CP] Check Pods Manifest.lock";
|
|
170
|
+
outputFileListPaths = (
|
|
171
|
+
);
|
|
172
|
+
outputPaths = (
|
|
173
|
+
"$(DERIVED_FILE_DIR)/Pods-AttentiveReactNativeSdk-checkManifestLockResult.txt",
|
|
174
|
+
);
|
|
175
|
+
runOnlyForDeploymentPostprocessing = 0;
|
|
176
|
+
shellPath = /bin/sh;
|
|
177
|
+
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
|
178
|
+
showEnvVarsInLog = 0;
|
|
179
|
+
};
|
|
180
|
+
/* End PBXShellScriptBuildPhase section */
|
|
181
|
+
|
|
137
182
|
/* Begin PBXSourcesBuildPhase section */
|
|
138
183
|
58B511D71A9E6C8500147676 /* Sources */ = {
|
|
139
184
|
isa = PBXSourcesBuildPhase;
|
|
140
185
|
buildActionMask = 2147483647;
|
|
141
186
|
files = (
|
|
142
187
|
FBED3EEA2C2F3F3900E7D5EB /* ATTNNativeSDK.swift in Sources */,
|
|
188
|
+
5C622475A2F0B4C034C942DD /* AttentiveSDKManager.swift in Sources */,
|
|
143
189
|
58F287A429D7860100C7DF09 /* AttentiveReactNativeSdk.mm in Sources */,
|
|
144
190
|
);
|
|
145
191
|
runOnlyForDeploymentPostprocessing = 0;
|
|
@@ -151,7 +197,8 @@
|
|
|
151
197
|
isa = XCBuildConfiguration;
|
|
152
198
|
buildSettings = {
|
|
153
199
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
154
|
-
|
|
200
|
+
CC = "";
|
|
201
|
+
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
|
|
155
202
|
CLANG_CXX_LIBRARY = "libc++";
|
|
156
203
|
CLANG_ENABLE_MODULES = YES;
|
|
157
204
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
@@ -173,6 +220,7 @@
|
|
|
173
220
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
174
221
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
175
222
|
COPY_PHASE_STRIP = NO;
|
|
223
|
+
CXX = "";
|
|
176
224
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
177
225
|
ENABLE_TESTABILITY = YES;
|
|
178
226
|
"EXCLUDED_ARCHS[sdk=*]" = arm64;
|
|
@@ -194,6 +242,8 @@
|
|
|
194
242
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
195
243
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
196
244
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
|
245
|
+
LD = "";
|
|
246
|
+
LDPLUSPLUS = "";
|
|
197
247
|
MTL_ENABLE_DEBUG_INFO = YES;
|
|
198
248
|
ONLY_ACTIVE_ARCH = YES;
|
|
199
249
|
OTHER_LDFLAGS = (
|
|
@@ -202,6 +252,8 @@
|
|
|
202
252
|
);
|
|
203
253
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
|
204
254
|
SDKROOT = iphoneos;
|
|
255
|
+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
|
|
256
|
+
USE_HERMES = true;
|
|
205
257
|
};
|
|
206
258
|
name = Debug;
|
|
207
259
|
};
|
|
@@ -209,7 +261,8 @@
|
|
|
209
261
|
isa = XCBuildConfiguration;
|
|
210
262
|
buildSettings = {
|
|
211
263
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
212
|
-
|
|
264
|
+
CC = "";
|
|
265
|
+
CLANG_CXX_LANGUAGE_STANDARD = "c++20";
|
|
213
266
|
CLANG_CXX_LIBRARY = "libc++";
|
|
214
267
|
CLANG_ENABLE_MODULES = YES;
|
|
215
268
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
@@ -231,6 +284,7 @@
|
|
|
231
284
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
232
285
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
233
286
|
COPY_PHASE_STRIP = YES;
|
|
287
|
+
CXX = "";
|
|
234
288
|
ENABLE_NS_ASSERTIONS = NO;
|
|
235
289
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
236
290
|
"EXCLUDED_ARCHS[sdk=*]" = arm64;
|
|
@@ -248,6 +302,8 @@
|
|
|
248
302
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
249
303
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
250
304
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
|
305
|
+
LD = "";
|
|
306
|
+
LDPLUSPLUS = "";
|
|
251
307
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
252
308
|
OTHER_LDFLAGS = (
|
|
253
309
|
"$(inherited)",
|
|
@@ -255,12 +311,14 @@
|
|
|
255
311
|
);
|
|
256
312
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
|
257
313
|
SDKROOT = iphoneos;
|
|
314
|
+
USE_HERMES = true;
|
|
258
315
|
VALIDATE_PRODUCT = YES;
|
|
259
316
|
};
|
|
260
317
|
name = Release;
|
|
261
318
|
};
|
|
262
319
|
58B511F01A9E6C8500147676 /* Debug */ = {
|
|
263
320
|
isa = XCBuildConfiguration;
|
|
321
|
+
baseConfigurationReference = 33355F3FC1852AA82C07D693 /* Pods-AttentiveReactNativeSdk.debug.xcconfig */;
|
|
264
322
|
buildSettings = {
|
|
265
323
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
266
324
|
CLANG_ENABLE_MODULES = YES;
|
|
@@ -284,6 +342,7 @@
|
|
|
284
342
|
};
|
|
285
343
|
58B511F11A9E6C8500147676 /* Release */ = {
|
|
286
344
|
isa = XCBuildConfiguration;
|
|
345
|
+
baseConfigurationReference = 949D2E1F5D8BA4C00733B1FD /* Pods-AttentiveReactNativeSdk.release.xcconfig */;
|
|
287
346
|
buildSettings = {
|
|
288
347
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
|
289
348
|
CLANG_ENABLE_MODULES = YES;
|
|
@@ -558,7 +558,33 @@ public extension ATTNNativeSDK {
|
|
|
558
558
|
ATTNEventTracker.sharedInstance()?.record(event: event)
|
|
559
559
|
|
|
560
560
|
if debuggingEnabled {
|
|
561
|
-
|
|
561
|
+
// Enhanced debug data to show parsed item details
|
|
562
|
+
var debugData: [String: Any] = [
|
|
563
|
+
"items_count": "\(items.count)",
|
|
564
|
+
"deeplink": deeplink,
|
|
565
|
+
"payload": attributes
|
|
566
|
+
]
|
|
567
|
+
|
|
568
|
+
// Add item details to debug output
|
|
569
|
+
if let firstItem = items.first {
|
|
570
|
+
var itemDetails: [String: Any] = [
|
|
571
|
+
"productId": firstItem.productId,
|
|
572
|
+
"productVariantId": firstItem.productVariantId
|
|
573
|
+
]
|
|
574
|
+
if let name = firstItem.name {
|
|
575
|
+
itemDetails["name"] = name
|
|
576
|
+
}
|
|
577
|
+
if let productImage = firstItem.productImage {
|
|
578
|
+
itemDetails["productImage"] = productImage
|
|
579
|
+
}
|
|
580
|
+
if let category = firstItem.category {
|
|
581
|
+
itemDetails["category"] = category
|
|
582
|
+
}
|
|
583
|
+
itemDetails["quantity"] = firstItem.quantity
|
|
584
|
+
debugData["first_item"] = itemDetails
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
showDebugInfo(event: "Add To Cart Event", data: debugData)
|
|
562
588
|
}
|
|
563
589
|
}
|
|
564
590
|
|
|
@@ -570,7 +596,33 @@ public extension ATTNNativeSDK {
|
|
|
570
596
|
ATTNEventTracker.sharedInstance()?.record(event: event)
|
|
571
597
|
|
|
572
598
|
if debuggingEnabled {
|
|
573
|
-
|
|
599
|
+
// Enhanced debug data to show parsed item details
|
|
600
|
+
var debugData: [String: Any] = [
|
|
601
|
+
"items_count": "\(items.count)",
|
|
602
|
+
"deeplink": deeplink,
|
|
603
|
+
"payload": attributes
|
|
604
|
+
]
|
|
605
|
+
|
|
606
|
+
// Add item details to debug output
|
|
607
|
+
if let firstItem = items.first {
|
|
608
|
+
var itemDetails: [String: Any] = [
|
|
609
|
+
"productId": firstItem.productId,
|
|
610
|
+
"productVariantId": firstItem.productVariantId
|
|
611
|
+
]
|
|
612
|
+
if let name = firstItem.name {
|
|
613
|
+
itemDetails["name"] = name
|
|
614
|
+
}
|
|
615
|
+
if let productImage = firstItem.productImage {
|
|
616
|
+
itemDetails["productImage"] = productImage
|
|
617
|
+
}
|
|
618
|
+
if let category = firstItem.category {
|
|
619
|
+
itemDetails["category"] = category
|
|
620
|
+
}
|
|
621
|
+
itemDetails["quantity"] = firstItem.quantity
|
|
622
|
+
debugData["first_item"] = itemDetails
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
showDebugInfo(event: "Product View Event", data: debugData)
|
|
574
626
|
}
|
|
575
627
|
}
|
|
576
628
|
|
|
@@ -584,7 +636,33 @@ public extension ATTNNativeSDK {
|
|
|
584
636
|
ATTNEventTracker.sharedInstance()?.record(event: event)
|
|
585
637
|
|
|
586
638
|
if debuggingEnabled {
|
|
587
|
-
|
|
639
|
+
// Enhanced debug data to show parsed item details
|
|
640
|
+
var debugData: [String: Any] = [
|
|
641
|
+
"items_count": "\(items.count)",
|
|
642
|
+
"order_id": orderId,
|
|
643
|
+
"payload": attributes
|
|
644
|
+
]
|
|
645
|
+
|
|
646
|
+
// Add item details to debug output
|
|
647
|
+
if let firstItem = items.first {
|
|
648
|
+
var itemDetails: [String: Any] = [
|
|
649
|
+
"productId": firstItem.productId,
|
|
650
|
+
"productVariantId": firstItem.productVariantId
|
|
651
|
+
]
|
|
652
|
+
if let name = firstItem.name {
|
|
653
|
+
itemDetails["name"] = name
|
|
654
|
+
}
|
|
655
|
+
if let productImage = firstItem.productImage {
|
|
656
|
+
itemDetails["productImage"] = productImage
|
|
657
|
+
}
|
|
658
|
+
if let category = firstItem.category {
|
|
659
|
+
itemDetails["category"] = category
|
|
660
|
+
}
|
|
661
|
+
itemDetails["quantity"] = firstItem.quantity
|
|
662
|
+
debugData["first_item"] = itemDetails
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
showDebugInfo(event: "Purchase Event", data: debugData)
|
|
588
666
|
}
|
|
589
667
|
}
|
|
590
668
|
|
|
@@ -606,21 +684,38 @@ private extension ATTNNativeSDK {
|
|
|
606
684
|
var itemsToReturn: [ATTNItem] = []
|
|
607
685
|
|
|
608
686
|
for rawItem in rawItems {
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
687
|
+
// Parse price - flattened structure (not nested)
|
|
688
|
+
guard let priceString = rawItem["price"] as? String,
|
|
689
|
+
let currency = rawItem["currency"] as? String,
|
|
690
|
+
let productId = rawItem["productId"] as? String,
|
|
691
|
+
let productVariantId = rawItem["productVariantId"] as? String else {
|
|
692
|
+
continue
|
|
693
|
+
}
|
|
612
694
|
|
|
613
|
-
|
|
695
|
+
let price = NSDecimalNumber(string: priceString)
|
|
696
|
+
let attnPrice = ATTNPrice(price: price, currency: currency)
|
|
614
697
|
|
|
615
|
-
|
|
698
|
+
let item = ATTNItem(productId: productId, productVariantId: productVariantId, price: attnPrice)
|
|
616
699
|
|
|
617
|
-
|
|
618
|
-
|
|
700
|
+
// Parse optional fields to match Android implementation
|
|
701
|
+
if let productImage = rawItem["productImage"] as? String {
|
|
702
|
+
item.productImage = productImage
|
|
703
|
+
}
|
|
619
704
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
}
|
|
705
|
+
if let name = rawItem["name"] as? String {
|
|
706
|
+
item.name = name
|
|
623
707
|
}
|
|
708
|
+
|
|
709
|
+
// React Native bridges JS numbers as NSNumber, so accept NSNumber directly
|
|
710
|
+
if let quantity = rawItem["quantity"] as? NSNumber {
|
|
711
|
+
item.quantity = quantity.intValue
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
if let category = rawItem["category"] as? String {
|
|
715
|
+
item.category = category
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
itemsToReturn.append(item)
|
|
624
719
|
}
|
|
625
720
|
|
|
626
721
|
return itemsToReturn
|
package/ios/Podfile
CHANGED
|
@@ -36,10 +36,10 @@ target 'AttentiveReactNativeSdk' do
|
|
|
36
36
|
post_install do |installer|
|
|
37
37
|
react_native_post_install(
|
|
38
38
|
installer,
|
|
39
|
+
config[:reactNativePath],
|
|
39
40
|
# Set `mac_catalyst_enabled` to `true` in order to apply patches
|
|
40
41
|
# necessary for Mac Catalyst builds
|
|
41
42
|
:mac_catalyst_enabled => false
|
|
42
43
|
)
|
|
43
|
-
__apply_Xcode_12_5_M1_post_install_workaround(installer)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -0,0 +1,37 @@
|
|
|
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>NSPrivacyAccessedAPITypes</key>
|
|
6
|
+
<array>
|
|
7
|
+
<dict>
|
|
8
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
9
|
+
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
|
|
10
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
11
|
+
<array>
|
|
12
|
+
<string>C617.1</string>
|
|
13
|
+
</array>
|
|
14
|
+
</dict>
|
|
15
|
+
<dict>
|
|
16
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
17
|
+
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
|
18
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
19
|
+
<array>
|
|
20
|
+
<string>CA92.1</string>
|
|
21
|
+
</array>
|
|
22
|
+
</dict>
|
|
23
|
+
<dict>
|
|
24
|
+
<key>NSPrivacyAccessedAPIType</key>
|
|
25
|
+
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
|
|
26
|
+
<key>NSPrivacyAccessedAPITypeReasons</key>
|
|
27
|
+
<array>
|
|
28
|
+
<string>35F9.1</string>
|
|
29
|
+
</array>
|
|
30
|
+
</dict>
|
|
31
|
+
</array>
|
|
32
|
+
<key>NSPrivacyCollectedDataTypes</key>
|
|
33
|
+
<array/>
|
|
34
|
+
<key>NSPrivacyTracking</key>
|
|
35
|
+
<false/>
|
|
36
|
+
</dict>
|
|
37
|
+
</plist>
|
package/package.json
CHANGED