Skip to content

Commit 7fc5b7d

Browse files
committed
chore: implement feedback
1 parent f26aa22 commit 7fc5b7d

File tree

1 file changed

+32
-86
lines changed

1 file changed

+32
-86
lines changed

vibetype/ViewController.swift

Lines changed: 32 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -261,119 +261,65 @@ extension ViewController: WKScriptMessageHandler {
261261
// MARK: - App Tracking Transparency Handlers
262262
extension ViewController {
263263

264+
// Helper method to dispatch ATT events to webview with proper JSON serialization
265+
private func dispatchATTEvent(eventName: String, detail: [String: Any]) {
266+
guard let jsonData = try? JSONSerialization.data(withJSONObject: detail),
267+
let jsonString = String(data: jsonData, encoding: .utf8) else {
268+
print("Error serializing ATT response for event: \(eventName)")
269+
return
270+
}
271+
let script = """
272+
window.dispatchEvent(new CustomEvent('\(eventName)', {
273+
detail: \(jsonString)
274+
}));
275+
"""
276+
vibetype.webView.evaluateJavaScript(script) { result, error in
277+
if let error = error {
278+
print("Error dispatching \(eventName): \(error)")
279+
}
280+
}
281+
}
282+
264283
func handleATTPermissionRequest() {
265284
if #available(iOS 14, *) {
266285
TrackingTransparencyManager.requestPermission { status in
267286
let statusString = TrackingTransparencyManager.statusToString(status)
268287
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-
}
274-
let script = """
275-
window.dispatchEvent(new CustomEvent('attPermissionResponse', {
276-
detail: \(jsonString)
277-
}));
278-
"""
279-
vibetype.webView.evaluateJavaScript(script) { result, error in
280-
if let error = error {
281-
print("Error dispatching ATT permission response: \(error)")
282-
}
283-
}
288+
self.dispatchATTEvent(eventName: "attPermissionResponse", detail: detail)
284289
}
285290
} else {
286291
// ATT is only available on iOS 14+
287-
let script = """
288-
window.dispatchEvent(new CustomEvent('attPermissionResponse', {
289-
detail: { status: 'unavailable', error: 'ATT requires iOS 14 or later' }
290-
}));
291-
"""
292-
vibetype.webView.evaluateJavaScript(script) { result, error in
293-
if let error = error {
294-
print("Error dispatching ATT permission response: \(error)")
295-
}
296-
}
292+
let detail: [String: Any] = ["status": "unavailable", "error": "ATT requires iOS 14 or later"]
293+
dispatchATTEvent(eventName: "attPermissionResponse", detail: detail)
297294
}
298295
}
299296

300297
func handleATTGetStatus() {
301298
if #available(iOS 14, *) {
302299
let statusString = TrackingTransparencyManager.getStatusString()
303300
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-
}
309-
let script = """
310-
window.dispatchEvent(new CustomEvent('attStatusResponse', {
311-
detail: \(jsonString)
312-
}));
313-
"""
314-
vibetype.webView.evaluateJavaScript(script) { result, error in
315-
if let error = error {
316-
print("Error dispatching ATT status response: \(error)")
317-
}
318-
}
301+
dispatchATTEvent(eventName: "attStatusResponse", detail: detail)
319302
} else {
320303
// ATT is only available on iOS 14+
321304
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-
}
327-
let script = """
328-
window.dispatchEvent(new CustomEvent('attStatusResponse', {
329-
detail: \(jsonString)
330-
}));
331-
"""
332-
vibetype.webView.evaluateJavaScript(script) { result, error in
333-
if let error = error {
334-
print("Error dispatching ATT status response: \(error)")
335-
}
336-
}
305+
dispatchATTEvent(eventName: "attStatusResponse", detail: detail)
337306
}
338307
}
339308

340309
func handleATTGetIDFA() {
341310
if #available(iOS 14, *) {
342311
let idfa = TrackingTransparencyManager.getIDFA()
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-
}
349-
let script = """
350-
window.dispatchEvent(new CustomEvent('attIDFAResponse', {
351-
detail: \(jsonString)
352-
}));
353-
"""
354-
vibetype.webView.evaluateJavaScript(script) { result, error in
355-
if let error = error {
356-
print("Error dispatching ATT IDFA response: \(error)")
357-
}
312+
var detail: [String: Any] = [:]
313+
if let idfa = idfa {
314+
detail["idfa"] = idfa
315+
} else {
316+
detail["idfa"] = NSNull()
358317
}
318+
dispatchATTEvent(eventName: "attIDFAResponse", detail: detail)
359319
} else {
360320
// 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-
}
367-
let script = """
368-
window.dispatchEvent(new CustomEvent('attIDFAResponse', {
369-
detail: \(jsonString)
370-
}));
371-
"""
372-
vibetype.webView.evaluateJavaScript(script) { result, error in
373-
if let error = error {
374-
print("Error dispatching ATT IDFA response: \(error)")
375-
}
376-
}
321+
let detail: [String: Any] = ["idfa": NSNull(), "error": "ATT requires iOS 14 or later"]
322+
dispatchATTEvent(eventName: "attIDFAResponse", detail: detail)
377323
}
378324
}
379325
}

0 commit comments

Comments
 (0)