Làm cách nào để tối ưu hóa tỷ lệ đồng ý Minh bạch theo dõi ứng dụng (ATT)? Việc cải thiện trải nghiệm xin quyền ATT bao gồm việc cung cấp ngữ cảnh trước khi xin quyền một cách rõ ràng, soạn thảo chuỗi NSUserTrackingUsageDescription chính xác và lựa chọn thời điểm thích hợp trong hành trình người dùng để hiển thị yêu cầu ủy quyền từ hệ thống. Tác động đến tỷ lệ ủy quyền cần được đo lường thực tế.
Mã định danh dành cho nhà quảng cáo (IDFA) là định danh thiết bị có thể đặt lại do Apple cung cấp, được sử dụng để quy kết và đo lường hoạt động tiếp thị trên iOS. Theo khuôn khổ Minh bạch theo dõi ứng dụng (ATT), các ứng dụng chỉ có thể truy cập IDFA sau khi nhận được sự cho phép rõ ràng từ người dùng thông qua bảng yêu cầu ủy quyền
ATTrackingManager.
| Thuật ngữ | Định nghĩa |
|---|---|
| IDFA | Mã định danh tiếp thị cấp nền tảng của Apple được quản lý bởi tính năng Minh bạch theo dõi ứng dụng. |
| Minh bạch theo dõi ứng dụng (ATT) | Khung công tác của Apple yêu cầu người dùng ủy quyền trước khi theo dõi họ trên các ứng dụng và trang web khác. |
| ATTrackingManager | API AppTrackingTransparency nguyên bản được sử dụng để yêu cầu quyền ủy quyền theo dõi. |
| Bước đệm xin quyền (Pre-Permission Primer) | Một màn hình tùy chỉnh trong ứng dụng hiển thị trước bảng thông báo hệ thống nhằm giải thích lý do yêu cầu ủy quyền. |
Kinh tế học về quyền truy cập IDFA và tối ưu hóa sự đồng ý ATT
Vai trò của quyền truy cập IDFA được ủy quyền trong việc đo lường trên iOS hiện đại
Quyền truy cập IDFA được ủy quyền có thể hỗ trợ quy kết tiếp thị ở cấp độ người dùng và quy trình đo lường khi việc ứng dụng sử dụng dữ liệu tuân thủ ATT và các yêu cầu từ đối tác đo lường cũng như tiếp thị. Khi không có quyền ủy quyền theo dõi, các nhóm vẫn cần đo lường tiếp thị có thể sử dụng các phương pháp trung gian do nền tảng hỗ trợ một cách độc lập như AdAttributionKit hoặc các tích hợp SKAdNetwork hiện có.
Khi được ủy quyền, IDFA cung cấp một khóa liên kết tất định cho các tích hợp mạng quảng cáo được hỗ trợ, giúp đối chiếu chuyển đổi ở cấp chiến dịch mà không cần mô hình hóa thống kê. Khi quyền ủy quyền bị từ chối, các ứng dụng sẽ chuyển đổi hoạt động đo lường sang các khung công tác nguyên bản của nền tảng.
Vấn đề với các lời nhắc xuất hiện ngay khi khởi động ứng dụng (Cold-Launch)
Việc nhắc người dùng cấp quyền theo dõi ngay khi khởi động ứng dụng được Apple cho phép về mặt kỹ thuật, nhưng điều này có thể cung cấp ít ngữ cảnh hơn cho quyết định ủy quyền sáng suốt vì người dùng chưa trải nghiệm các tính năng của ứng dụng:
- Thiếu niềm tin vào sản phẩm: Người dùng lần đầu chưa kịp xây dựng sự tin tưởng đối với chức năng, giá trị thương hiệu hoặc các phương thức bảo mật dữ liệu của ứng dụng.
- Ngữ cảnh không rõ ràng: Hộp thoại hệ thống nguyên bản xuất hiện mà không có lời giải thích trước, khiến những người dùng thận trọng có xu hướng chọn “Yêu cầu ứng dụng không theo dõi”.
- Sự mệt mỏi vì bị xin quyền: Việc hiển thị chồng chéo nhiều hộp thoại xin quyền của hệ thống (như Thông báo đẩy, ATT và Vị trí) trong lần khởi động ứng dụng đầu tiên tạo ra ma sát và làm tăng tỷ lệ bỏ dở quá trình làm quen với ứng dụng (onboarding). Tài liệu API của Apple lưu ý rằng nếu một cảnh báo quyền hạn hiện có đang chờ xử lý, các yêu cầu ủy quyền tiếp theo sẽ không hiển thị.

Đánh giá hiệu suất đồng ý dựa trên thực tế
Tỷ lệ đồng ý đạt được sẽ khác nhau tùy thuộc vào danh mục ứng dụng, mức độ tin cậy của đối tượng, thời điểm hiển thị lời nhắc và độ rõ ràng của nội dung. Các nhóm nên đánh giá các biến thể tối ưu hóa bằng cách kiểm tra A/B có kiểm soát thay vì giả định các tiêu chuẩn cố định của ngành.
Xem thêm: IDFA ──> Mô hình quy kết di động
Cơ chế kỹ thuật của khung công tác AppTrackingTransparency
Bốn trạng thái ủy quyền
Quyền truy cập vào IDFA được quản lý chặt chẽ bởi enum ATTrackingManager.AuthorizationStatus:
notDetermined(0): Người dùng chưa được hiển thị hộp thoại ủy quyền.restricted(1): Thiết bị bị giới hạn bởi các biện pháp kiểm soát của phụ huynh, cấu hình hồ sơ giáo dục hoặc MDM doanh nghiệp; không thể cấp quyền theo dõi và nút chuyển đổi trong cài đặt bị vô hiệu hóa.denied(2): Ứng dụng không có quyền truy cập dữ liệu liên quan đến ứng dụng để theo dõi sau khi người dùng từ chối yêu cầu.authorized(3): Người dùng ủy quyền theo dõi. Trên các thiết bị iOS và iPadOS được hỗ trợ, trạng thái này thông thường cho phép truy cập vào mã định danh tiếp thị khác không.

Quy tắc hiển thị lời nhắc hệ thống một lần duy nhất
Hệ điều hành iOS thực thi quy tắc hiển thị một lần cho ATTrackingManager.requestTrackingAuthorization. Ngay khi người dùng tương tác với hộp thoại hệ thống bằng cách chọn “Cho phép” hoặc “Yêu cầu ứng dụng không theo dõi”, hệ thống sẽ ghi nhớ trạng thái đã xác định và không hiển thị lại lời nhắc đó trong suốt quá trình cài đặt ứng dụng này.
Mặc dù lời nhắc hệ thống sẽ không xuất hiện lần thứ hai, người dùng vẫn có thể thủ công điều chỉnh quyền ủy quyền theo dõi bất kỳ lúc nào trong phần Cài đặt của iOS.
Cách iOS thực thi việc xóa mã định danh về số không khi quyền theo dõi bị giữ lại
Trên iOS 14.5 trở lên, mã định danh tiếp thị thông thường trả về toàn bộ số không (00000000-0000-0000-0000-000000000000) khi quyền theo dõi chưa được cấp. Các nhà phát triển nên xác minh cả trạng thái ủy quyền ATT và giá trị mã định danh được trả về theo yêu cầu thay vì giả định rằng chuỗi được lưu vào bộ đệm vẫn hợp lệ trong suốt các lần khởi động ứng dụng.
Kiến trúc UX tỷ lệ chuyển đổi cao: Chiến lược bước đệm trước khi xin quyền
Giải phẫu một bước đệm ngữ cảnh hiệu quả: Các ràng buộc HIG của Apple
Theo Hướng dẫn Giao diện Người dùng về Quyền riêng tư của Apple, các ứng dụng có thể hiển thị một màn hình thông báo tùy chỉnh trước khi xuất hiện lời nhắc cấp quyền của hệ thống nếu cần thêm ngữ cảnh. Tuy nhiên, Apple áp dụng các quy tắc thiết kế nghiêm ngặt đối với các bước đệm xin quyền này:
- Nút hành động đơn: Màn hình trước khi xin quyền chỉ được cung cấp một nút duy nhất (chẳng hạn như “Tiếp tục” hoặc “Tiếp theo”) dẫn trực tiếp đến lời nhắc của hệ thống. Không được cung cấp nút “Hủy”, “Đóng” hoặc “Để sau” nhằm né tránh hoặc trì hoãn cảnh báo hệ thống.
- Không bắt chước giao diện người dùng: Màn hình bước đệm tuyệt đối không được mô phỏng trực quan hộp cảnh báo hệ thống iOS nguyên bản hoặc hiển thị các nút giả được dán nhãn “Cho phép”.
- Không ép buộc về mặt thị giác: Giao diện không được sử dụng đồ họa, mũi tên hoặc kiểu dáng có độ tương phản cao được thiết kế nhằm thao túng hoặc hướng người dùng chọn “Cho phép” trên lời nhắc hệ thống tiếp theo.
Tuân thủ Nguyên tắc Đánh giá App Store 5.1.2
Theo Phần 5.1.2 của Nguyên tắc Đánh giá App Store của Apple, Apple áp dụng các ranh giới rõ ràng liên quan đến yêu cầu cấp quyền:
- Cấm theo dõi có khuyến khích: Các ứng dụng bị nghiêm cấm cung cấp ưu đãi tài chính, tiền ảo, nội dung cao cấp hoặc giảm giá để đổi lấy sự đồng ý cấp phép ATT. Việc làm vi phạm Nguyên tắc 5.1.2 này có thể dẫn đến việc ứng dụng bị từ chối.
- Không chặn các tính năng cốt lõi: Các ứng dụng không được phép chặn các tính năng cốt lõi, ngăn chặn việc tạo tài khoản hoặc làm giảm hiệu suất ứng dụng nếu người dùng từ chối quyền theo dõi.
- Sự ưu tiên cho lựa chọn của người dùng: Lựa chọn theo dõi thực tế của người dùng phải luôn được thực hiện trên lời nhắc hệ thống nguyên bản của Apple.

Giai đoạn 1: Giới thiệu người dùng / Nhận diện giá trị cốt lõi
│
▼
Giai đoạn 2: Màn hình bước đệm ngữ cảnh trước khi xin quyền
(Hành động "Tiếp tục" đơn lẻ ── Giải thích mục đích)
│
▼
Giai đoạn 3: Hộp thoại hệ thống ATTrackingManager nguyên bản trên iOS
(Người dùng chọn "Cho phép" hoặc "Yêu cầu ứng dụng không theo dõi")
│
┌────────────┴────────────┐
▼ ▼
[.authorized] [.denied]
Đã ủy quyền ATT Dự phòng mượt mà
(IDFA thường có sẵn) sang API nền tảng
(AdAttributionKit / SKAN)
Tối ưu hóa chuỗi NSUserTrackingUsageDescription
Cấu hình Info.plist để minh bạch mục đích
Khóa NSUserTrackingUsageDescription trong Info.plist xác định chuỗi giải thích hiển thị trực tiếp trong cảnh báo hệ thống ATT nguyên bản của Apple. Theo tài liệu của Apple, chuỗi này phải ngắn gọn, cụ thể và giải thích chính xác cách thức dữ liệu theo dõi được sử dụng.
Kiểm tra các biến thể chuỗi mục đích rõ ràng mà không làm thay đổi thông tin tiết lộ cơ bản
Khi kiểm tra các biến thể chuỗi, mọi biến thể được kiểm tra đều phải mô tả chính xác và đầy đủ các hoạt động theo dõi thực tế của ứng dụng:
- Tập trung vào cá nhân hóa: Giải thích cách dữ liệu được sử dụng để tùy chỉnh các đề xuất nội dung và gợi ý sản phẩm.
- Tập trung vào tính liên quan của quảng cáo: Giải thích cách dữ liệu được sử dụng để cung cấp các chương trình khuyến mãi phù hợp và tránh các quảng cáo lặp đi lặp lại.
- Tập trung vào đo lường chiến dịch: Giải thích cách dữ liệu được sử dụng để đo lường hiệu suất của các mối quan hệ đối tác tiếp thị.
Cấu hình bên dưới minh họa một ví dụ về NSUserTrackingUsageDescription. Chỉ sử dụng khi ngôn từ mô tả chính xác các hoạt động theo dõi thực tế của ứng dụng:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSUserTrackingUsageDescription</key>
<string>Dữ liệu của bạn sẽ được sử dụng để cung cấp các đề xuất sản phẩm được cá nhân hóa, ưu đãi khuyến mãi phù hợp và đo lường hiệu suất chiến dịch quảng cáo.</string>
</dict>
</plist>
Thiết kế kích hoạt thời điểm nhắc nhở tối ưu trong vòng đời người dùng
Cân nhắc về thời điểm trong toàn bộ hành trình người dùng
Mặc dù việc yêu cầu ủy quyền ATT ngay trong lần khởi động đầu tiên được cho phép về mặt kỹ thuật, việc hiển thị lời nhắc sau khi người dùng trải nghiệm tiện ích sản phẩm ban đầu có thể cung cấp ngữ cảnh phù hợp hơn cho yêu cầu ủy quyền:
- Trình kích hoạt sau khi làm quen (Post-Onboarding): Hiển thị lời nhắc sau khi người dùng hoàn tất thiết lập tài khoản và cấu hình các tùy chọn ban đầu.
- Trình kích hoạt theo cột mốc ngữ cảnh: Hiển thị lời nhắc sau khi hoàn thành một hành động cốt lõi của người dùng (ví dụ: hoàn thành hướng dẫn làm quen trong trò chơi, lưu mặt hàng yêu thích trong ứng dụng mua sắm hoặc đánh dấu bài viết trong ứng dụng nội dung).
Triển khai kỹ thuật ATTrackingManager bằng Swift
Xử lý trạng thái hoạt động của ứng dụng và tính an toàn của luồng (Thread Safety)
Theo tài liệu API của Apple, ATTrackingManager.requestTrackingAuthorization chỉ hiển thị hộp thoại phương thức khi trạng thái ứng dụng là .active. Nếu một lời nhắc cấp quyền khác đang hoạt động hoặc đang chờ xử lý, cảnh báo hệ thống sẽ không hiển thị và các yêu cầu đồng thời không được hệ điều hành xếp hàng chờ.

Việc triển khai bên dưới tách biệt việc quản lý trạng thái ủy quyền khỏi giao diện bước đệm trước khi xin quyền tùy chỉnh mang tính minh họa:
import UIKit
import AppTrackingTransparency
import AdSupport
final class ATTManager {
static let shared = ATTManager()
private init() {}
/// Đánh giá trạng thái ủy quyền hiện tại
var currentStatus: ATTrackingManager.AuthorizationStatus {
return ATTrackingManager.trackingAuthorizationStatus
}
/// Xác định xem có thể hiển thị yêu cầu ủy quyền theo dõi hay không
var canRequestAuthorization: Bool {
return currentStatus == .notDetermined
}
/// Yêu cầu ủy quyền theo dõi với tính năng xác minh trạng thái hoạt động của ứng dụng
/// - Parameter completion: Closure trả về trạng thái ủy quyền đã được giải quyết
func requestAuthorization(completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void) {
guard canRequestAuthorization else {
completion(currentStatus)
return
}
// Xác minh ứng dụng đang hoạt động trước khi gọi requestTrackingAuthorization
guard UIApplication.shared.applicationState == .active else {
print("Đã bỏ qua yêu cầu ATT: ứng dụng không hoạt động. Hãy gọi lại khi hoạt động nếu trạng thái vẫn là notDetermined.")
completion(currentStatus)
return
}
DispatchQueue.main.async {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
// Đọc mã định danh tiếp thị hiện tại theo yêu cầu; không lưu trữ IDFA được lưu vào bộ đệm.
let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
print("Đã ủy quyền ATT - IDFA khả dụng: \(idfa)")
case .denied:
print("Đã từ chối ATT - Mã định danh tiếp thị trả về các số không")
case .restricted:
print("ATT bị hạn chế bởi cấu hình hệ thống")
case .notDetermined:
print("Trạng thái ATT chưa được giải quyết")
@unknown default:
print("Đã gặp trạng thái ATT không xác định")
}
completion(status)
}
}
}
}
}
/// UIViewController tùy chỉnh mang tính minh họa cho bước đệm trước khi xin quyền tuân thủ HIG
final class ATTPrimerViewController: UIViewController {
private let continueButton = UIButton(type: .system)
private let titleLabel = UILabel()
private let descriptionLabel = UILabel()
var onContinueTapped: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
private func setupUI() {
view.backgroundColor = .systemBackground
// Ngăn chặn thao tác vuốt để đóng tương tác khi hiển thị dưới dạng modal để đảm bảo điều hướng một đường duy nhất
isModalInPresentation = true
titleLabel.text = "Giúp Chúng Tôi Cá Nhân Hóa Trải Nghiệm Của Bạn"
titleLabel.font = .boldSystemFont(ofSize: 20)
titleLabel.textAlignment = .center
titleLabel.numberOfLines = 0
descriptionLabel.text = "Chúng tôi sử dụng dữ liệu để điều chỉnh các đề xuất sản phẩm và cung cấp các ưu đãi khuyến mãi phù hợp. Trên màn hình tiếp theo, bạn sẽ thấy lời nhắc cấp quyền tiêu chuẩn của Apple để xác nhận lựa chọn của mình."
descriptionLabel.font = .systemFont(ofSize: 15)
descriptionLabel.textAlignment = .center
descriptionLabel.textColor = .secondaryLabel
descriptionLabel.numberOfLines = 0
// Hướng dẫn của Apple HIG yêu cầu một hành động Tiếp tục hoặc Tiếp theo duy nhất
continueButton.setTitle("Tiếp tục", for: .normal)
continueButton.titleLabel?.font = .boldSystemFont(ofSize: 17)
continueButton.addTarget(self, action: #selector(handleContinue), for: .touchUpInside)
let stack = UIStackView(arrangedSubviews: [titleLabel, descriptionLabel, continueButton])
stack.axis = .vertical
stack.spacing = 20
stack.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stack)
NSLayoutConstraint.activate([
stack.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stack.centerYAnchor.constraint(equalTo: view.centerYAnchor),
stack.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 32),
stack.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -32)
])
}
@objc private func handleContinue() {
// Cơ chế hiển thị và đóng mang tính minh họa và nên được điều chỉnh theo kiến trúc điều hướng của ứng dụng.
dismiss(animated: true) { [weak self] in
self?.onContinueTapped?()
}
}
}
Khôi phục sau khi bị từ chối: Hướng dẫn người dùng đến Cài đặt hệ thống mà không vi phạm chính sách
Khi nào nên giới thiệu quy trình cài đặt phụ
Khi người dùng chọn “Yêu cầu ứng dụng không theo dõi”, trạng thái ủy quyền sẽ phân giải thành .denied. Các lệnh gọi tiếp theo tới requestTrackingAuthorization sẽ trả về .denied mà không hiển thị hộp thoại. Tuy nhiên, nếu sau đó người dùng khởi启动 một tính năng mang lại lợi ích rõ ràng từ việc theo dõi (chẳng hạn như yêu cầu cài đặt quảng cáo được cá nhân hóa trong hồ sơ tài khoản của họ), ứng dụng có thể cung cấp một đường dẫn không mang tính ép buộc tới Cài đặt iOS.
Sử dụng UIApplication.openSettingsURLString
Để hướng dẫn người dùng đến bảng cài đặt của ứng dụng, hãy sử dụng UIApplication.openSettingsURLString:
if let settingsURL = URL(string: UIApplication.openSettingsURLString),
UIApplication.shared.canOpenURL(settingsURL) {
UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
}
Lưu ý rằng API này mở trang cài đặt chuyên dụng của ứng dụng; nó không cung cấp liên kết sâu trực tiếp tới màn hình chung Cài đặt > Quyền riêng tư & Bảo mật > Theo dõi.
Ranh giới chính sách của App Store
- Không làm phiền liên tục: Không hiển thị các biểu ngữ định kỳ nhắc người dùng bật tính năng theo dõi trong phần cài đặt.
- Không khóa tính năng: Không bao giờ vô hiệu hóa chức năng cốt lõi vì tính năng theo dõi vẫn bị tắt trong cài đặt.
Ma trận quyết định so sánh: Chiến lược bước đệm trước khi xin quyền so với Lời nhắc khởi động ứng dụng (Cold-Launch)
| Khía cạnh | Lời nhắc khởi động lạnh mặc định | Hộp thoại cấp quyền chặn cứng | Bước đệm trước khi xin quyền tuân thủ HIG |
|---|---|---|---|
| Ngữ cảnh người dùng trước khi nhắc nhở | Thấp (Chưa tương tác với sản phẩm) | Khác nhau (Chặn quyền truy cập) | Có ngữ cảnh (Hiển thị sau khi tương tác có liên quan) |
| Hướng dẫn về UI/Quyền của Apple | Được phép khi yêu cầu và việc sử dụng dữ liệu tuân thủ | Không được phép khi quyền truy cập hoặc đền bù phụ thuộc vào việc theo dõi | Được phép khi tuân thủ các ràng buộc cảnh báo trước của HIG và quy tắc theo dõi |
| Ràng buộc UI cảnh báo trước của Apple | Không áp dụng | Không áp dụng | Hành động Tiếp tục/Tiếp theo duy nhất; không có cảnh báo giả |
| Thời điểm ngắt quãng xin quyền | Ngay khi khởi chạy | Chặn truy cập | Cột mốc ngữ cảnh |
| Tỷ lệ đồng ý quan sát được | Phải được đo lường thực tế | Không được phép | Phải được đo lường thực tế |
Các câu hỏi thường gặp (FAQ)
Ứng dụng có thể cung cấp tiền tệ trong ứng dụng hoặc giảm giá để đổi lấy quyền cấp phép ATT không?
Ứng dụng có thể hiển thị lời nhắc ATT thứ hai nếu người dùng ban đầu chọn “Yêu cầu ứng dụng không theo dõi” không?
Bước đệm trước khi xin quyền có vi phạm nguyên tắc App Store của Apple không?
Tóm tắt và Khung quyết định
Cải thiện trải nghiệm cấp phép ATT đòi hỏi việc công bố rõ ràng mục đích và thời điểm phù hợp với ngữ cảnh. Khi cần giải thích thêm, bước đệm xin quyền tuân thủ chuẩn HIG có thể cung cấp ngữ cảnh trước khi lời nhắc hệ thống hiển thị, đồng thời đưa trải nghiệm cấp phép vào đúng các nguyên tắc theo dõi và giao diện đã được Apple công bố.
Nếu vẫn cần ngữ cảnh quy kết hoặc làm quen sau khi ATT bị từ chối, các ứng dụng có thể sử dụng các cơ chế được phép độc lập như AdAttributionKit, các tích hợp SKAdNetwork hiện có hoặc định tuyến ngữ cảnh chính thống thuộc quyền sở hữu riêng nằm trong các quy tắc theo dõi của Apple.
Để biết thông tin về định tuyến ngữ cảnh dành riêng cho sản phẩm và hành vi quy kết, hãy xem lại tài liệu của OpoInstall và đánh giá việc triển khai dựa trên các yêu cầu theo dõi hiện hành của Apple.
Tài liệu liên quan
-
Khái niệm: Minh bạch theo dõi ứng dụng, Tối ưu hóa IDFA, Bước đệm trước khi xin quyền, Phễu đồng ý
-
Công nghệ: Khung công tác StoreKit, Khung công tác AppTrackingTransparency, SDK di động OpoInstall
-
Tiêu chuẩn: Hướng dẫn Giao diện Người dùng của Apple về Quyền riêng tư, Phần 5.1.2 của Nguyên tắc Đánh giá App Store
-
API:
ATTrackingManager.requestTrackingAuthorization,UIApplication.openSettingsURLString,ASIdentifierManager
Tài liệu chính thức
Share this article



