一、簡介和程式碼
2021年1月28日蘋果App 需要透過 AppTrackingTransparency 徵得使用者的許可,才能跟蹤使用者以及訪問其裝置的廣告識別符號。AppTrackingTransparency 蘋果的官方要求以下是用Swift編寫的獲取IDFA的方法,並且包含了所有可能的 ATTrackingManager.AuthorizationStatus
狀態及其備註資訊:
import UIKit import AdSupport import AppTrackingTransparency class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { requestIDFA() return true } func requestIDFA() { if #available(iOS 14, *) { ATTrackingManager.requestTrackingAuthorization { status in switch status { case .notDetermined: // 使用者尚未做出選擇 print("User has not yet made a choice regarding tracking authorization.") case .restricted: // 裝置受限制,無法請求追蹤許可權 print("Device is restricted and cannot request tracking authorization.") case .denied: // 使用者拒絕了追蹤許可權 print("User denied tracking authorization.") case .authorized: // 使用者授權成功,可以獲取IDFA let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString print("IDFA: \(idfa)") @unknown default: // 處理其他未知狀態 print("Unknown tracking authorization status.") } } } else { // iOS 13及以下版本可以直接獲取IDFA,無需請求許可權 if ASIdentifierManager.shared().isAdvertisingTrackingEnabled { let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString print("IDFA: \(idfa)") } else { print("Advertising tracking is disabled.") } } } }
二、說明
ATTrackingManager.AuthorizationStatus.notDetermined:使用者尚未做出選擇。在這種情況下,使用者還沒有看到許可權請求彈窗。
ATTrackingManager.AuthorizationStatus.restricted:裝置受限制,無法請求追蹤許可權。這通常發生在家長控制或其他系統限制的情況下。
ATTrackingManager.AuthorizationStatus.denied:使用者拒絕了追蹤許可權。在這種情況下,你無法獲取IDFA。
ATTrackingManager.AuthorizationStatus.authorized:使用者授權成功,可以獲取IDFA。
@unknown default:處理其他未知狀態。雖然目前只有上述四種狀態,但爲了程式碼的健壯性,我們新增了一個預設分支來處理未來可能出現的新狀態。
三、在適當的地方呼叫方法
在 AppDelegate.swift
中的 application(_:didFinishLaunchingWithOptions:)
方法中呼叫 requestIDFA()
方法,以確保在應用啟動時請求IDFA許可權。
四、程式碼新增完畢還需要在手機端進行如下設定
必須蘋果手機的隱私與安全裡的跟蹤設定
允許App請求跟蹤
,否則不會彈出廣告許可權的彈窗。