Skip to content

Commit 421d8d2

Browse files
authored
fix slotOpener: do not append adView if no slot found (#163)
1 parent 1650b54 commit 421d8d2

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

TeadsSampleApp/WebViewHelper/TeadsWebViewHelper.swift

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
6161

6262
private var isJsReady = false
6363

64-
private var slotOpenner: (() -> Void)?
65-
private var slotPositionAvailable: ((WKWebView, SlotPosition) -> Void)?
64+
private var slotOpener: (() -> Void)?
65+
private var slotOpportunity: ((WKWebView, SlotPosition) -> Void)?
6666

6767
/// Init the Teads webView helper
6868
///
@@ -130,19 +130,22 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
130130
/// insert the slot in the webview with the selector
131131
private func insertSlot() {
132132
//add a timeout in case we are not able to find the slot
133-
let timer = Timer(timeInterval: 4, repeats: false) { [delegate] _ in
134-
delegate?.webViewHelperSlotNotFound()
133+
let timer = Timer(timeInterval: 4, repeats: false) { [weak self] _ in
134+
self?.slotOpener = nil
135+
self?.delegate?.webViewHelperSlotNotFound()
135136
}
136137
noSlotTimer = timer
137138
RunLoop.main.add(timer, forMode: .common)
138139

139140
evaluateBootstrapInput(JSBootstrapInput.insertPlaceholder(selector)) { [weak self] (_, error) in
140141
if error != nil {
142+
self?.slotOpener = nil
141143
self?.delegate?.webViewHelperOnError(error: "insertSlot failed")
142144
self?.delegate?.webViewHelperSlotNotFound()
143145
self?.noSlotTimer?.invalidate()
146+
} else {
147+
self?.slotOpener?()
144148
}
145-
self?.slotOpenner?()
146149
}
147150
}
148151

@@ -160,7 +163,7 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
160163
}
161164

162165
public func openSlot(adView: UIView, adRatio: TeadsAdRatio = .default) {
163-
slotOpenner = { [self] in
166+
slotOpener = { [self] in
164167
//update slot with the right ratio
165168
self.updateSlot(adRatio: adRatio)
166169

@@ -176,10 +179,10 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
176179
delegate?.webViewHelperOnError(error: "openSlot failed")
177180
}
178181
}
179-
self.slotOpenner = nil
182+
self.slotOpener = nil
180183
}
181184
if isJsReady {
182-
slotOpenner?()
185+
slotOpener?()
183186
}
184187
}
185188

@@ -289,11 +292,12 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
289292
guard let webView = self.webView else {
290293
return
291294
}
292-
slotPositionAvailable?(webView, position)
295+
slotOpportunity?(webView, position)
293296

294297
guard let adView = self.adView else {
295298
return
296299
}
300+
297301
let adViewHTMLElementHeight = position.bottom - position.top
298302
//when the adView is from Admob we can't update the frame without having a new request, so the update is done with an Admob method in the controller
299303
var shouldUpdateAdViewFrame: Bool {
@@ -326,7 +330,7 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
326330
/// - adOpportunityTrackerView: the view that will monitor your inventory
327331
///
328332
@objc public func setAdOpportunityTrackerView(_ adOpportunityTrackerView: TeadsAdOpportunityTrackerView) {
329-
slotPositionAvailable = { [weak self] webView, position in
333+
slotOpportunity = { [weak self] webView, position in
330334
adOpportunityTrackerView.frame = CGRect(x: position.left, y: position.top, width: 1, height: 1)
331335
webView.scrollView.addSubview(adOpportunityTrackerView)
332336

@@ -336,13 +340,13 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
336340
adOpportunityTrackerView.leadingAnchor.constraint(equalTo: webView.scrollView.leadingAnchor, constant: position.left).isActive = true
337341
adOpportunityTrackerView.widthAnchor.constraint(equalToConstant: 1).isActive = true
338342
adOpportunityTrackerView.heightAnchor.constraint(equalToConstant: 1).isActive = true
339-
self?.slotPositionAvailable = nil
343+
self?.slotOpportunity = nil
340344
}
341-
guard let position = slotPosition,
342-
let webView = webView else {
343-
return
345+
346+
if let position = slotPosition,
347+
let webView = webView {
348+
slotOpportunity?(webView, position)
344349
}
345-
slotPositionAvailable?(webView, position)
346350
}
347351
}
348352

0 commit comments

Comments
 (0)