@@ -265,9 +265,15 @@ extension ViewController {
265265 if #available( iOS 14 , * ) {
266266 TrackingTransparencyManager . requestPermission { status in
267267 let statusString = TrackingTransparencyManager . statusToString ( status)
268+ let detail : [ String : Any ] = [ " status " : statusString]
269+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: detail) ,
270+ let jsonString = String ( data: jsonData, encoding: . utf8) else {
271+ print ( " Error serializing ATT permission response " )
272+ return
273+ }
268274 let script = """
269275 window.dispatchEvent(new CustomEvent('attPermissionResponse', {
270- detail: { status: ' \( statusString ) ' }
276+ detail: \( jsonString )
271277 }));
272278 """
273279 vibetype. webView. evaluateJavaScript ( script) { result, error in
@@ -283,16 +289,26 @@ extension ViewController {
283289 detail: { status: 'unavailable', error: 'ATT requires iOS 14 or later' }
284290 }));
285291 """
286- vibetype. webView. evaluateJavaScript ( script)
292+ vibetype. webView. evaluateJavaScript ( script) { result, error in
293+ if let error = error {
294+ print ( " Error dispatching ATT permission response: \( error) " )
295+ }
296+ }
287297 }
288298 }
289299
290300 func handleATTGetStatus( ) {
291301 if #available( iOS 14 , * ) {
292302 let statusString = TrackingTransparencyManager . getStatusString ( )
303+ let detail : [ String : Any ] = [ " status " : statusString]
304+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: detail) ,
305+ let jsonString = String ( data: jsonData, encoding: . utf8) else {
306+ print ( " Error serializing ATT status response " )
307+ return
308+ }
293309 let script = """
294310 window.dispatchEvent(new CustomEvent('attStatusResponse', {
295- detail: { status: ' \( statusString ) ' }
311+ detail: \( jsonString )
296312 }));
297313 """
298314 vibetype. webView. evaluateJavaScript ( script) { result, error in
@@ -302,22 +318,37 @@ extension ViewController {
302318 }
303319 } else {
304320 // ATT is only available on iOS 14+
321+ let detail : [ String : Any ] = [ " status " : " unavailable " ]
322+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: detail) ,
323+ let jsonString = String ( data: jsonData, encoding: . utf8) else {
324+ print ( " Error serializing ATT status response " )
325+ return
326+ }
305327 let script = """
306328 window.dispatchEvent(new CustomEvent('attStatusResponse', {
307- detail: { status: 'unavailable' }
329+ detail: \( jsonString )
308330 }));
309331 """
310- vibetype. webView. evaluateJavaScript ( script)
332+ vibetype. webView. evaluateJavaScript ( script) { result, error in
333+ if let error = error {
334+ print ( " Error dispatching ATT status response: \( error) " )
335+ }
336+ }
311337 }
312338 }
313339
314340 func handleATTGetIDFA( ) {
315341 if #available( iOS 14 , * ) {
316342 let idfa = TrackingTransparencyManager . getIDFA ( )
317- let idfaValue = idfa ?? " null "
343+ let detail : [ String : Any ? ] = [ " idfa " : idfa]
344+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: detail, options: [ ] ) ,
345+ let jsonString = String ( data: jsonData, encoding: . utf8) else {
346+ print ( " Error serializing ATT IDFA response " )
347+ return
348+ }
318349 let script = """
319350 window.dispatchEvent(new CustomEvent('attIDFAResponse', {
320- detail: { idfa: ' \( idfaValue ) ' }
351+ detail: \( jsonString )
321352 }));
322353 """
323354 vibetype. webView. evaluateJavaScript ( script) { result, error in
@@ -327,12 +358,22 @@ extension ViewController {
327358 }
328359 } else {
329360 // ATT is only available on iOS 14+
361+ let detail : [ String : Any ? ] = [ " idfa " : nil , " error " : " ATT requires iOS 14 or later " ]
362+ guard let jsonData = try ? JSONSerialization . data ( withJSONObject: detail, options: [ ] ) ,
363+ let jsonString = String ( data: jsonData, encoding: . utf8) else {
364+ print ( " Error serializing ATT IDFA response " )
365+ return
366+ }
330367 let script = """
331368 window.dispatchEvent(new CustomEvent('attIDFAResponse', {
332- detail: { idfa: null, error: 'ATT requires iOS 14 or later' }
369+ detail: \( jsonString )
333370 }));
334371 """
335- vibetype. webView. evaluateJavaScript ( script)
372+ vibetype. webView. evaluateJavaScript ( script) { result, error in
373+ if let error = error {
374+ print ( " Error dispatching ATT IDFA response: \( error) " )
375+ }
376+ }
336377 }
337378 }
338379}
0 commit comments