@@ -61,8 +61,8 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
61
61
62
62
private var isJsReady = false
63
63
64
- private var slotOpenner : ( ( ) -> Void ) ?
65
- private var slotPositionAvailable : ( ( WKWebView , SlotPosition ) -> Void ) ?
64
+ private var slotOpener : ( ( ) -> Void ) ?
65
+ private var slotOpportunity : ( ( WKWebView , SlotPosition ) -> Void ) ?
66
66
67
67
/// Init the Teads webView helper
68
68
///
@@ -130,19 +130,22 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
130
130
/// insert the slot in the webview with the selector
131
131
private func insertSlot( ) {
132
132
//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 ( )
135
136
}
136
137
noSlotTimer = timer
137
138
RunLoop . main. add ( timer, forMode: . common)
138
139
139
140
evaluateBootstrapInput ( JSBootstrapInput . insertPlaceholder ( selector) ) { [ weak self] ( _, error) in
140
141
if error != nil {
142
+ self ? . slotOpener = nil
141
143
self ? . delegate? . webViewHelperOnError ( error: " insertSlot failed " )
142
144
self ? . delegate? . webViewHelperSlotNotFound ( )
143
145
self ? . noSlotTimer? . invalidate ( )
146
+ } else {
147
+ self ? . slotOpener ? ( )
144
148
}
145
- self ? . slotOpenner ? ( )
146
149
}
147
150
}
148
151
@@ -160,7 +163,7 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
160
163
}
161
164
162
165
public func openSlot( adView: UIView , adRatio: TeadsAdRatio = . default) {
163
- slotOpenner = { [ self ] in
166
+ slotOpener = { [ self ] in
164
167
//update slot with the right ratio
165
168
self . updateSlot ( adRatio: adRatio)
166
169
@@ -176,10 +179,10 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
176
179
delegate? . webViewHelperOnError ( error: " openSlot failed " )
177
180
}
178
181
}
179
- self . slotOpenner = nil
182
+ self . slotOpener = nil
180
183
}
181
184
if isJsReady {
182
- slotOpenner ? ( )
185
+ slotOpener ? ( )
183
186
}
184
187
}
185
188
@@ -289,11 +292,12 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
289
292
guard let webView = self . webView else {
290
293
return
291
294
}
292
- slotPositionAvailable ? ( webView, position)
295
+ slotOpportunity ? ( webView, position)
293
296
294
297
guard let adView = self . adView else {
295
298
return
296
299
}
300
+
297
301
let adViewHTMLElementHeight = position. bottom - position. top
298
302
//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
299
303
var shouldUpdateAdViewFrame : Bool {
@@ -326,7 +330,7 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
326
330
/// - adOpportunityTrackerView: the view that will monitor your inventory
327
331
///
328
332
@objc public func setAdOpportunityTrackerView( _ adOpportunityTrackerView: TeadsAdOpportunityTrackerView ) {
329
- slotPositionAvailable = { [ weak self] webView, position in
333
+ slotOpportunity = { [ weak self] webView, position in
330
334
adOpportunityTrackerView. frame = CGRect ( x: position. left, y: position. top, width: 1 , height: 1 )
331
335
webView. scrollView. addSubview ( adOpportunityTrackerView)
332
336
@@ -336,13 +340,13 @@ public class TeadsWebViewHelper: NSObject, WKScriptMessageHandler {
336
340
adOpportunityTrackerView. leadingAnchor. constraint ( equalTo: webView. scrollView. leadingAnchor, constant: position. left) . isActive = true
337
341
adOpportunityTrackerView. widthAnchor. constraint ( equalToConstant: 1 ) . isActive = true
338
342
adOpportunityTrackerView. heightAnchor. constraint ( equalToConstant: 1 ) . isActive = true
339
- self ? . slotPositionAvailable = nil
343
+ self ? . slotOpportunity = nil
340
344
}
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)
344
349
}
345
- slotPositionAvailable ? ( webView, position)
346
350
}
347
351
}
348
352
0 commit comments