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