一、简介和代码
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请求跟踪,否则不会弹出广告权限的弹窗。