Skip to content

Commit 110512b

Browse files
authored
fix: send multiplem conversions (#24)
* fix: send multiplem conversions * release
1 parent f3fc855 commit 110512b

File tree

5 files changed

+65
-33
lines changed

5 files changed

+65
-33
lines changed

CompassSDK/Tracker/Core/CompassTracker.swift

+57-27
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public class CompassTracker: Tracker {
147147
}
148148

149149
private var deadline: Double {
150-
switch trackInfo.tik {
150+
switch tick {
151151
case 0..<2: return 5
152152
case 2: return 10
153153
case 3..<20: return 15
@@ -156,6 +156,8 @@ public class CompassTracker: Tracker {
156156
}
157157

158158
private var trackInfo = IngestTrackInfo()
159+
160+
private var tick = 0
159161

160162
private var scrollView: UIScrollView?
161163

@@ -310,24 +312,26 @@ extension CompassTracker: ConversionsProvider {
310312
}
311313

312314
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)
331335
}
332336
}
333337

@@ -340,24 +344,49 @@ internal extension CompassTracker {
340344

341345
private extension CompassTracker {
342346
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) {
346371
let operation = tikOperationFactory.buildOperation(
347372
dataBuilder: { [self] (completion) in
348373
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
350380
}
351-
352381
return nil
353382
},
354383
dispatchDate: dispatchDate,
355384
path: TIK_PATH,
356385
contentType: ContentType.FORM
357386
)
358-
observeFinish(for: operation) { [self] in
359-
trackInfo.tik = trackInfo.tik + 1
360-
self.doTik()
387+
388+
observeFinish(for: operation) {
389+
dispatchGroup.leave()
361390
}
362391
operationQueue.addOperation(operation)
363392
}
@@ -367,6 +396,7 @@ private extension CompassTracker {
367396
operationQueue.cancelAllOperations()
368397
trackInfo.pageUrl = pageName
369398
pageVars.removeAll()
399+
tick = 0
370400
CompassTrackerMultimedia.shared.reset()
371401
}
372402

CompassSDK/Tracker/Core/IngestTrackInfo.swift

-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ extension IngestTrackInfo {
4444
return
4545
}
4646
trackInfo.pageUrl = newValue
47-
tik = 0
4847
scrollPercent = 0
4948
}
5049
get {

MarfeelSDK-iOS.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Pod::Spec.new do |spec|
1616
#
1717

1818
spec.name = "MarfeelSDK-iOS"
19-
spec.version = "2.12.0"
19+
spec.version = "2.12.1"
2020
spec.summary = "iOS version of MarfeelSDK."
2121

2222
# This description is used to generate tags and improve search results.

Playground/Playground/BlogPostStore.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class BlogPostsStore: ObservableObject {
2525
""",
2626
featured: true,
2727
url: "http://dev.marfeel.co/2022/11/25/article-with-video-html5/",
28-
videoId: "eeiOGg17YNQ"
28+
videoId: "UbjLtXKEE-I"
2929
),
3030
BlogPost(
3131
title: "Post 2 Title",
@@ -43,7 +43,7 @@ class BlogPostsStore: ObservableObject {
4343
""",
4444
featured: false,
4545
url: "http://dev.marfeel.co/2022/07/29/hola-1/",
46-
videoId: "d-6Iqnp2Ja8"
46+
videoId: "UbjLtXKEE-I"
4747
),
4848
BlogPost(
4949
title: "Post 3 Title",
@@ -60,7 +60,7 @@ class BlogPostsStore: ObservableObject {
6060
""",
6161
featured: false,
6262
url: "http://dev.marfeel.co/2022/07/29/corrupti-sit-vero-asperiores-ratione-non-velit/",
63-
videoId: "d-6Iqnp2Ja8"
63+
videoId: "UbjLtXKEE-I"
6464
),
6565
BlogPost(
6666
title: "Post 4 Title",
@@ -78,7 +78,7 @@ class BlogPostsStore: ObservableObject {
7878
""",
7979
featured: false,
8080
url: "http://dev.marfeel.co/2022/06/28/consectetur-consequuntur-quis-nobis-quia/",
81-
videoId: "eeiOGg17YNQ"
81+
videoId: "UbjLtXKEE-I"
8282
)
8383
]
8484
}

Playground/Playground/BlogPostView.swift

+3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ struct BlogPostView: View {
6868
CompassTracker.shared.setPageVar(name: "pepe", value: blogPost.id.description)
6969
CompassTracker.shared.setPageVar(name: "pepe2", value: blogPost.id.description)
7070
CompassTracker.shared.setUserVar(name: "pepe-user", value: blogPost.id.description)
71+
CompassTracker.shared.trackConversion(conversion: "conv_1")
72+
CompassTracker.shared.trackConversion(conversion: "conv_2")
73+
CompassTracker.shared.trackConversion(conversion: "conv_3")
7174
})
7275
.onReceive(videoPlayer.playbackStatePublisher) { state in
7376
guard isVideoInitialized else {

0 commit comments

Comments
 (0)