@@ -147,7 +147,7 @@ public class CompassTracker: Tracker {
147
147
}
148
148
149
149
private var deadline : Double {
150
- switch trackInfo . tik {
150
+ switch tick {
151
151
case 0 ..< 2 : return 5
152
152
case 2 : return 10
153
153
case 3 ..< 20 : return 15
@@ -156,6 +156,8 @@ public class CompassTracker: Tracker {
156
156
}
157
157
158
158
private var trackInfo = IngestTrackInfo ( )
159
+
160
+ private var tick = 0
159
161
160
162
private var scrollView : UIScrollView ?
161
163
@@ -310,24 +312,26 @@ extension CompassTracker: ConversionsProvider {
310
312
}
311
313
312
314
internal extension CompassTracker {
313
- func getTrackingData( _ completion: @escaping ( IngestTrackInfo ) -> ( ) ) {
314
- getScrollPercent { [ self ] ( scrollPercent) in
315
- getConversions { [ self ] ( conversions) in
316
- if ( ( scrollPercent ?? 0 ) > ( self . trackInfo. scrollPercent ?? 0 ) ) {
317
- self . trackInfo. scrollPercent = scrollPercent
318
- }
319
-
320
- var finalTrackInfo = self . trackInfo
321
-
322
- finalTrackInfo. conversions = conversions. isEmpty ? nil : conversions
323
- finalTrackInfo. userVars = storage. userVars
324
- finalTrackInfo. sessionVars = storage. sessionVars
325
- finalTrackInfo. pageVars = pageVars
326
- finalTrackInfo. userSegments = storage. userSegments
327
- finalTrackInfo. hasConsent = storage. hasConsent
328
-
329
- completion ( finalTrackInfo)
330
- }
315
+ func getTrackingData( for conversion: String ? = nil , tick: Int ? = 0 , _ completion: @escaping ( IngestTrackInfo ) -> ( ) ) {
316
+ getScrollPercent { [ self ] scrollPercent in
317
+ var finalTrackInfo = self . trackInfo
318
+
319
+ if let scrollPercent = scrollPercent, scrollPercent > ( finalTrackInfo. scrollPercent ?? 0 ) {
320
+ finalTrackInfo. scrollPercent = scrollPercent
321
+ }
322
+
323
+ if let conversion = conversion {
324
+ finalTrackInfo. conversions = [ conversion]
325
+ }
326
+
327
+ finalTrackInfo. userVars = storage. userVars
328
+ finalTrackInfo. sessionVars = storage. sessionVars
329
+ finalTrackInfo. pageVars = pageVars
330
+ finalTrackInfo. userSegments = storage. userSegments
331
+ finalTrackInfo. hasConsent = storage. hasConsent
332
+ finalTrackInfo. tik = tick!
333
+
334
+ completion ( finalTrackInfo)
331
335
}
332
336
}
333
337
@@ -340,24 +344,49 @@ internal extension CompassTracker {
340
344
341
345
private extension CompassTracker {
342
346
func doTik( ) {
343
- guard trackInfo. pageUrl != nil else { return }
344
- let dispatchDate = Date ( timeIntervalSinceNow: deadline)
345
- trackInfo. currentDate = dispatchDate
347
+ guard trackInfo. pageUrl != nil else { return }
348
+
349
+ getConversions { [ self ] conversions in
350
+ let dispatchDate = Date ( timeIntervalSinceNow: deadline)
351
+
352
+ let dispatchGroup = DispatchGroup ( )
353
+
354
+ if conversions. isEmpty {
355
+ dispatchGroup. enter ( )
356
+ createOperation ( conversion: nil , dispatchDate: dispatchDate, dispatchGroup: dispatchGroup)
357
+ } else {
358
+ for conversion in conversions {
359
+ dispatchGroup. enter ( )
360
+ createOperation ( conversion: conversion, dispatchDate: dispatchDate, dispatchGroup: dispatchGroup)
361
+ }
362
+ }
363
+
364
+ dispatchGroup. notify ( queue: . main) {
365
+ self . doTik ( )
366
+ }
367
+ }
368
+ }
369
+
370
+ private func createOperation( conversion: String ? , dispatchDate: Date , dispatchGroup: DispatchGroup ) {
346
371
let operation = tikOperationFactory. buildOperation (
347
372
dataBuilder: { [ self ] ( completion) in
348
373
DispatchQueue . global ( qos: . utility) . async {
349
- self . getTrackingData ( completion)
374
+ if let conversion = conversion {
375
+ self . getTrackingData ( for: conversion, tick: self . tick, completion)
376
+ } else {
377
+ self . getTrackingData ( for: nil , tick: self . tick, completion)
378
+ }
379
+ self . tick += 1
350
380
}
351
-
352
381
return nil
353
382
} ,
354
383
dispatchDate: dispatchDate,
355
384
path: TIK_PATH,
356
385
contentType: ContentType . FORM
357
386
)
358
- observeFinish ( for : operation ) { [ self ] in
359
- trackInfo . tik = trackInfo . tik + 1
360
- self . doTik ( )
387
+
388
+ observeFinish ( for : operation ) {
389
+ dispatchGroup . leave ( )
361
390
}
362
391
operationQueue. addOperation ( operation)
363
392
}
@@ -367,6 +396,7 @@ private extension CompassTracker {
367
396
operationQueue. cancelAllOperations ( )
368
397
trackInfo. pageUrl = pageName
369
398
pageVars. removeAll ( )
399
+ tick = 0
370
400
CompassTrackerMultimedia . shared. reset ( )
371
401
}
372
402
0 commit comments