ATT iOS: nó là gì, cơ chế yêu cầu theo dõi và IDFA

Tác giả: IT Sectr Đã đăng: 2026-05-20 Thời gian đọc: 10 phút

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

  • ATT — App Tracking Transparency, framework yêu cầu theo dõi trong iOS 14.5+
  • IDFA — định danh quảng cáo của thiết bị, quyền truy cập bị hạn chế nếu không có sự đồng ý
  • Hộp thoại hệ thống — cửa sổ bậc lên tiêu chuẩn với văn bản của ứng dụng không thể thay đổi
  • Quyền theo dõi — yêu cầu bắt buộc để hiển thị quảng cáo và phân bổ lượt cài đặt
  • Từ chối — người dùng có thể thu hồi quyền trong Cài đặt bất cứ lúc nào

ATT (App Tracking Transparency) là gì?

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”.

Cách ATT liên quan đến quyền riêng tư trong iOS

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.

Thay đổi trong iOS 15 và 16

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.

Cách yêu cầu theo dõi hoạt động trong iOS

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.

Kiểm tra trạng thái ủy quyề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.

swift
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ệ thống

Để 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.

swift
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 và hạn chế truy cập

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à gì và tại sao cần nó

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ế.

Các lựa chọn thay thế cho IDFA: SKAdNetwork và Phân bổ xác suất

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.

Triển khai ATT trong mã ứng dụng

Để 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.

Thiết lập Info.plist

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.

xml
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>

Tích hợp đầy đủ trong Swift

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.

swift
final class TrackingManager {
    static let shared = TrackingManager()

    func requestTrackingIfNeeded() {
        guard ATTrackingManager.trackingAuthorizationStatus
            == .notDetermined
        else { return }

        ATTrackingManager.requestTrackingAuthorization { _ in
            NotificationCenter.default.post(
                Notification(Name("trackingStatusChanged"))
            )
        }
    }
}

Lỗi khi làm việc với ATT

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.

Yêu cầu ATT ngay sau khi khởi động ứng dụng

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ị.

Thiếu màn hình trước khi cấp phép

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.

Bỏ qua trạng thái restricted và denied

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 mà không gọi ATT

Đọ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 NSUserTrackingUsageDescription không chính xác

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

Điều gì xảy ra nếu không thêm ATT vào ứng dụng?

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.

Ứng dụng có hoạt động mà không có sự đồng ý theo dõi không?

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ó thể đặt lại trạng thái ATT trong iOS khô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.

Làm thế nào để tăng tỷ lệ đồng ý ATT?

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.

ATT có ảnh hưởng đến ứng dụng cho trẻ em không?

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

  • ATT — App Tracking Transparency, framework bắt buộc để yêu cầu quyền truy cập IDFA trong iOS 14.5+
  • IDFA — định danh quảng cáo của thiết bị, được ATT bảo vệ khỏi truy cập trái phép
  • Hộp thoại hệ thống — người dùng luôn thấy hộp thoại mà ứng dụng không thể sửa đổi hoặc vượt qua
  • Trước khi cấp phép — màn hình tùy chỉnh giải thích lợi ích, tăng tỷ lệ đồng ý lên 20–40%
  • SKAdNetwork — phương pháp phân bổ duy nhất của Apple cho các ứng dụng không có quyền truy cập IDFA
  • Tỷ lệ chuyển đổi — tỷ lệ đồng ý toàn cầu là 25–35%, ở Châu Âu lên tới 50% nhờ GDPR
  • Tích hợp ATT trước khi gọi bất kỳ trình theo dõi nào và đảm bảo thêm khóa NSUserTrackingUsageDescription vào Info.plist

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.

Thảo luận dự án

Đọc thêm