Skip to content

Commit f26aa22

Browse files
committed
chore: implement feedback
1 parent 45d58c7 commit f26aa22

File tree

2 files changed

+58
-22
lines changed

2 files changed

+58
-22
lines changed

vibetype/TrackingTransparency.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,7 @@ class TrackingTransparencyManager {
2121

2222
// Get status as a string representation for JavaScript
2323
static func getStatusString() -> String {
24-
let status = getStatus()
25-
switch status {
26-
case .notDetermined:
27-
return "notDetermined"
28-
case .restricted:
29-
return "restricted"
30-
case .denied:
31-
return "denied"
32-
case .authorized:
33-
return "authorized"
34-
@unknown default:
35-
return "unknown"
36-
}
24+
return statusToString(getStatus())
3725
}
3826

3927
// Convert status to string
@@ -59,6 +47,13 @@ class TrackingTransparencyManager {
5947
}
6048

6149
let idfa = ASIdentifierManager.shared().advertisingIdentifier
50+
51+
// Apple returns all zeros when tracking is not authorized
52+
let zeroIDFA = UUID(uuidString: "00000000-0000-0000-0000-000000000000")!
53+
guard idfa != zeroIDFA else {
54+
return nil
55+
}
56+
6257
return idfa.uuidString
6358
}
6459
}

vibetype/ViewController.swift

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)