App Tracking Transparency (ATT) là một cơ chế iOS yêu cầu sự đồng ý rõ ràng của người dùng để truy cập vào định danh quảng cáo IDFA trước khi theo dõi trong các ứng dụng và trang web. Được giới thiệu trong iOS 14.5, ATT đã bắt buộc tất cả nhà phát triển phải hiển thị hộp thoại hệ thống yêu cầu quyền theo dõi. Theo Tài liệu nhà phát triển Apple, mọi ứng dụng sử dụng IDFA cho quảng cáo được nhắm mục tiêu hoặc phân bổ phải tích hợp framework ATT và nhận được quyền truy cập.
Các điểm chính
App Tracking Transparency là một framework của Apple để bảo vệ quyền riêng tư của người dùng, được giới thiệu trong iOS 14.5. Nó yêu cầu các ứng dụng phải có sự cho phép rõ ràng để truy cập vào định danh quảng cáo của thiết bị (IDFA) trước khi sử dụng nó để theo dõi.
Trước ATT, các nhà phát triển có thể đọc IDFA mà không cần xin phép, cho phép các mạng quảng cáo xây dựng hồ sơ người dùng và theo dõi hoạt động của họ giữa các ứng dụng và trang web. Apple coi đây là vi phạm quyền riêng tư và đã giới thiệu hộp thoại đồng ý bắt buộc.
Framework này đã có sẵn từ iOS 14.0, nhưng trở thành bắt buộc đối với tất cả ứng dụng sử dụng IDFA khi iOS 14.5 ra mắt vào tháng 4 năm 2021. Theo Flurry Analytics, sau khi triển khai ATT, ít hơn 25% người dùng Hoa Kỳ đồng ý theo dõi, điều này đã thay đổi căn bản thị trường quảng cáo di động.
ATT kiểm tra quyền thông qua một hộp thoại hệ thống đặc biệt mà ứng dụng không thể sửa đổi hoặc vượt qua. Người dùng thấy một cửa sổ bậc lên tiêu chuẩn với văn bản do nhà phát triển cung cấp và chọn “Cho phép” hoặc “Yêu cầu ứng dụng không theo dõi”.
Apple định vị ATT như một phần trong chiến lược quyền riêng tư tổng thể của mình, bao gồm Nhãn dinh dưỡng quyền riêng tư trong App Store và Tuyên bố quyền riêng tư. Cả ba cơ chế hoạt động cùng nhau: nhãn hiển thị dữ liệu ứng dụng thu thập, Tuyên bố nêu rõ lý do sử dụng API và ATT cung cấp cho người dùng quyền kiểm soát việc theo dõi.
Từ chối theo dõi không làm gián đoạn hoạt động của ứng dụng — người dùng có thể tiếp tục sử dụng tất cả các tính năng, nhưng các mạng quảng cáo sẽ không nhận được IDFA để cá nhân hóa và phân bổ. Các lựa chọn thay thế của Apple cho IDFA bao gồm SKAdNetwork và Phân bổ xác suất.
Theo Branch Metrics, sau khi ATT được giới thiệu, tỷ lệ ứng dụng nhận được IDFA đã giảm từ 70% xuống 20% trên toàn cầu. Điều này đã dẫn đến việc xem xét lại các phương pháp phân bổ lượt cài đặt và kiếm tiền từ quảng cáo.
Trong iOS 15, Apple không thắt chặt các yêu cầu ATT nhưng đã thêm Báo cáo quyền riêng tư của ứng dụng — một báo cáo cho người dùng thấy tần suất các ứng dụng truy cập vào cảm biến và dữ liệu. iOS 16 mở rộng quyền kiểm soát: người dùng có thể thay đổi cài đặt theo dõi bất cứ lúc nào qua Cài đặt → Quyền riêng tư → Theo dõi.
Quan trọng: nếu người dùng chọn “Yêu cầu ứng dụng không theo dõi” trong hộp thoại ATT, ứng dụng sẽ không nhận được giá trị IDFA — thay vào đó, nó trả về một chuỗi số không: 00000000-0000-0000-0000-000000000000. Cố gắng đọc IDFa bằng các phương tiện khác hoặc phương pháp vòng tránh sẽ dẫn đến việc ứng dụng bị từ chối trên App Store.
Bắt đầu từ iOS 17, Apple đã tăng cường kiểm tra: nếu một ứng dụng yêu cầu IDFA mà không hiển thị hộp thoại hệ thống ATT, nó sẽ nhận được sự từ chối ở cấp hệ điều hành, không chỉ là một định danh trống. Điều này loại bỏ khả năng thu thập IDFa ở chế độ nền mà không có sự hiểu biết của người dùng.
Quy trình yêu cầu ATT bao gồm ba giai đoạn: kiểm tra trạng thái, hiển thị hộp thoại hệ thống và xử lý phản hồi. Nhà phát triển không thể bỏ qua bất kỳ bước nào — hệ điều hành kiểm soát từng giai đoạn.
Trước khi gọi hộp thoại, ứng dụng phải kiểm tra trạng thái hiện tại thông qua ATTrackingManager. Các trạng thái có thể: notDetermined (chưa được yêu cầu), restricted (bị cấm bởi chính sách thiết bị), denied (người dùng từ chối), authorized (được phép).
Nếu trạng thái đã được xác định (authorized hoặc denied), không thể gọi hộp thoại lần nữa — người dùng đã đưa ra quyết định vĩnh viễn. Cách duy nhất để thay đổi quyết định là thông qua cài đặt hệ thống iOS.
Để kiểm tra trạng thái, sử dụng thuộc tính ATTrackingManager.trackingAuthorizationStatus. Lời gọi phải diễn ra trên luồng chính vì hộp thoại hệ thống là một thành phần giao diện người dùng.
import AppTrackingTransparency
import AdSupport
func checkTrackingStatus() {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .notDetermined:
requestTrackingPermission()
case .authorized:
readIDFA()
case .denied, .restricted:
useAlternativeTracking()
@unknown default:
break
}
}
Để hiển thị hộp thoại, hãy gọi phương thức requestTrackingAuthorization với một closure nhận kết quả lựa chọn của người dùng. Quan trọng: hộp thoại chỉ hiển thị một lần. Nếu nhà phát triển cố gắng gọi lại, hệ thống sẽ bỏ qua yêu cầu.
Văn bản hộp thoại bao gồm hai phần: tiêu đề hệ thống (không thể thay đổi) và thông báo tùy chỉnh mà nhà phát triển chỉ định trong Info.plist thông qua khóa NSUserTrackingUsageDescription.
Hộp thoại sẽ xuất hiện trong bối cảnh tự nhiên — không phải ngay khi khởi động ứng dụng, mà ở lần đầu tiên cố gắng sử dụng chức năng liên quan đến theo dõi. Apple khuyên bạn nên hiển thị hộp thoại sau khi người dùng hiểu được giá trị của tính năng.
func requestTrackingPermission() {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
let idfa = ASIdentifierManager.shared().advertisingIdentifier
print("IDFA: \(idfa)")
case .denied:
print("Người dùng đã từ chối theo dõi")
default:
break
}
}
}
}
IDFA (Identifier for Advertisers) là một định danh quảng cáo duy nhất cho các thiết bị iOS, được sử dụng cho quảng cáo được nhắm mục tiêu và phân bổ lượt cài đặt. Trước ATT, các nhà phát triển lấy nó thông qua ASIdentifierManager mà không bị hạn chế. Sau ATT, quyền truy cập vào IDFA bị chặn cho đến khi người dùng đồng ý rõ ràng.
IDFA là một chuỗi UUID duy nhất cho mỗi thiết bị iOS. Các mạng quảng cáo sử dụng IDFA để: theo dõi lượt cài đặt ứng dụng (phân bổ), hiển thị quảng cáo có liên quan dựa trên sở thích của người dùng, đo lường hiệu quả chiến dịch quảng cáo và tiếp thị lại — thu hút lại những người dùng chưa hoàn thành hành động mong muốn.
Sau khi người dùng từ chối theo dõi, ASIdentifierManager trả về giá trị 00000000-0000-0000-0000-000000000000. Ứng dụng vẫn có thể đọc IDFA cho các mục đích kỹ thuật (như chống gian lận), nhưng không thể chuyển nó cho các mạng quảng cáo.
Theo Singular (2024), tỷ lệ đồng ý ATT toàn cầu là 25–35%, với Châu Âu (GDPR) cao hơn (40–50%) so với Hoa Kỳ (15–25%). Điều này đã thúc đẩy các nền tảng quảng cáo phát triển các phương pháp phân bổ thay thế.
SKAdNetwork là một framework của Apple để phân bổ lượt cài đặt mà không tiết lộ IDFA. Nó hoạt động ở cấp hệ điều hành: mạng quảng cáo gửi một postback được ký, Apple xác thực và chuyển tiếp đến nhà phát triển. Việc phân bổ diễn ra mà không xác định một người dùng cụ thể, chỉ ở cấp chiến dịch.
Phân bổ xác suất sử dụng nhiều tín hiệu thiết bị — mô hình, phiên bản iOS, múi giờ, độ sáng màn hình — để so khớp xác suất các lượt cài đặt với các lần hiển thị quảng cáo. Tuy nhiên, Apple cấm phương pháp này trong hướng dẫn của mình và việc sử dụng nó có thể dẫn đến từ chối ứng dụng.
Google, Adjust và AppsFlyer đã phát triển các giải pháp kết hợp riêng của họ kết hợp SKAdNetwork với dữ liệu tổng hợp độc quyền. Ví dụ, Google Ads Conversion Tracking sử dụng postback SKAdNetwork và các mô hình học máy của riêng mình để phân bổ mà không cần IDFA.
Để tích hợp ATT, bạn cần thêm khóa NSUserTrackingUsageDescription vào Info.plist và nhập framework AppTrackingTransparency. Dưới đây là các bước cho Swift và Objective-C.
Bước đầu tiên là thêm khóa NSUserTrackingUsageDescription vào Info.plist với văn bản giải thích lý do ứng dụng cần theo dõi. Văn bản này sẽ xuất hiện trong hộp thoại hệ thống. Ví dụ: “IDFA của bạn được sử dụng để hiển thị quảng cáo được cá nhân hóa và theo dõi hiệu quả chiến dịch.”
Nếu không có khóa này, việc gọi requestTrackingAuthorization sẽ khiến ứng dụng bị treo — Apple kiểm tra rõ ràng sự hiện diện của NSUserTrackingUsageDescription trước khi hiển thị hộp thoại. Văn bản phải ngắn gọn, cụ thể và phản ánh việc sử dụng dữ liệu thực tế.
Quan trọng: khóa được thêm thủ công qua tab Info của Xcode hoặc chỉnh sửa tệp nguồn XML của Info.plist. Sau khi thêm, hãy xây dựng lại dự án và xác nhận rằng khóa xuất hiện trong tệp nhị phân cuối cùng.
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>
Trong một dự án thực tế, tốt nhất nên gọi yêu cầu ATT trước khi khởi chạy mô-đun quảng cáo hoặc trình theo dõi lần đầu tiên. Bạn nên giải thích giá trị của sự đồng ý trên một màn hình riêng (lời nhắc trước khi cấp phép) — điều này làm tăng tỷ lệ đồng ý lên 20–30%.
Lời nhắc trước khi cấp phép là một giao diện người dùng tùy chỉnh hiển thị lợi ích của việc bật theo dõi (“Hãy giúp chúng tôi hiển thị quảng cáo có liên quan cho bạn”). Chỉ sau khi nhấn “Tiếp tục”, hộp thoại hệ thống ATT mới xuất hiện. Adjust (2024) đã ghi nhận mức tăng 40% đồng ý khi sử dụng màn hình trước khi cấp phép.
final class TrackingManager {
static let shared = TrackingManager()
func requestTrackingIfNeeded() {
guard ATTrackingManager.trackingAuthorizationStatus
== .notDetermined
else { return }
ATTrackingManager.requestTrackingAuthorization { _ in
NotificationCenter.default.post(
Notification(Name("trackingStatusChanged"))
)
}
}
}
Các nhà phát triển thường mắc phải những lỗi điển hình khi tích hợp ATT, dẫn đến tỷ lệ đồng ý thấp hơn hoặc ứng dụng bị từ chối bởi người kiểm duyệt App Store. Hãy xem năm vấn đề phổ biến nhất.
Lỗi phổ biến nhất là hiển thị hộp thoại hệ thống ATT trên màn hình đầu tiên ngay sau khi ứng dụng được tải. Người dùng chưa hiểu giá trị của ứng dụng và có khả năng nhấn “Từ chối”. IronSource (2023) cho thấy mức giảm 32% đồng ý khi yêu cầu trên màn hình đầu tiên so với sau phiên thứ ba.
Khuyến nghị: yêu cầu theo dõi sau khi người dùng thực hiện hành động có giá trị (đã xem nội dung, bắt đầu quá trình làm quen) hoặc sau 3–5 phiên sử dụng ứng dụng. Điều này làm tăng niềm tin và nhận thức về giá trị.
Hiển thị hộp thoại hệ thống ATT mà không giải thích trước là một lỗi làm giảm tỷ lệ chuyển đổi xuống 15–20%. Người dùng thấy một yêu cầu bất ngờ và theo bản năng từ chối. Màn hình trước khi cấp phép giải thích lợi ích làm tăng đồng ý lên 35–45%.
Văn bản trước khi cấp phép phải cụ thể: “Cho phép chúng tôi hiển thị quảng cáo có liên quan — điều này giúp chúng tôi duy trì miễn phí.” Tránh các cụm từ mơ hồ — chúng làm giảm lòng tin. GameAnalytics đã chỉ ra vào năm 2023 rằng màn hình trước khi cấp phép giải thích lợi ích mang lại nhiều sự đồng ý hơn 28% so với màn hình trống.
Nếu người dùng đã từ chối theo dõi hoặc trạng thái là restricted (kiểm soát của phụ huynh, chính sách doanh nghiệp), ứng dụng không nên gọi lại hộp thoại ATT. Lời gọi lặp lại sẽ không hoạt động và bị coi là vi phạm quyền riêng tư. Thay vào đó, hãy chuyển sang SKAdNetwork và quảng cáo theo ngữ cảnh.
Ở trạng thái restricted, ứng dụng không thể xác định liệu tùy chọn “Cho phép yêu cầu theo dõi” có được bật trong cài đặt hay không. Trong trường hợp này, luôn sử dụng SKAdNetwork là phương pháp phân bổ duy nhất và không hiển thị màn hình trước khi cấp phép.
Đọc IDFA qua ASIdentifierManager.shared().advertisingIdentifier mà không có quyền ATT trước sẽ trả về một chuỗi số không. Một số nhà phát triển cố gắng sử dụng các phương pháp truy cập IDFA cũ thông qua API riêng tư — điều này chắc chắn dẫn đến từ chối trong quá trình xem xét ứng dụng.
Apple sử dụng phân tích mã tĩnh và học máy để phát hiện các cách vượt qua. Ngay cả khi ứng dụng vượt qua được quá trình xem xét, các bản cập nhật sau đó hoặc kiểm tra tự động có thể phát hiện vi phạm và dẫn đến việc khóa tài khoản nhà phát triển.
Văn bản quá dài, mơ hồ hoặc gây hiểu lầm trong khóa NSUserTrackingUsageDescription là lý do bị người kiểm duyệt từ chối. Apple kiểm tra rằng mô tả phù hợp với việc sử dụng dữ liệu thực tế. Nếu ứng dụng không có quảng cáo nhưng ghi “vì mục đích quảng cáo”, người kiểm duyệt sẽ từ chối bản dựng.
Định dạng được khuyến nghị: mô tả cụ thể về mục đích sử dụng IDFA, dài 2–3 câu. Ví dụ cho ứng dụng không có quảng cáo: “Định danh được sử dụng cho phân tích và ngăn chặn gian lận. Dữ liệu không được chia sẻ với bên thứ ba và không được sử dụng cho việc lập hồ sơ.”
Câu hỏi thường gặp
Nếu ứng dụng sử dụng IDFA hoặc theo dõi mà không có ATT, Apple sẽ từ chối nó trong quá trình xem xét. Ngay cả khi không có theo dõi, bạn nên thêm ATT để minh bạch — nếu không, nguy cơ bị từ chối sẽ tăng sau mỗi lần cập nhật.
Có, ứng dụng hoạt động đầy đủ, nhưng các mạng quảng cáo sẽ không nhận được IDFA để cá nhân hóa và phân bổ. Tất cả các tính năng của ứng dụng, ngoại trừ quảng cáo được cá nhân hóa, vẫn khả dụng.
Có, người dùng có thể thay đổi quyết định của mình bất cứ lúc nào qua Cài đặt → Quyền riêng tư → Theo dõi. Ứng dụng không thể đặt lại trạng thái bằng lệnh — chỉ thông qua cài đặt hệ thống.
Sử dụng màn hình trước khi cấp phép giải thích lợi ích và yêu cầu theo dõi không phải ở lần khởi chạy đầu tiên mà sau khi người dùng thực hiện hành động có giá trị. Meta (2024) cho thấy mức tăng 35% đồng ý với các yêu cầu bị trì hoãn.
Các ứng dụng trong danh mục “Trẻ em” không thể sử dụng IDFA và ATT để theo dõi theo quy tắc của Apple. Họ cũng bị cấm chia sẻ dữ liệu với bên thứ ba cho mục đích phân tích hoặc quảng cáo.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm