คู่มือการ optimization Apple ATT: วิธีเพิ่มอัตรา Opt-In ของ ATT

opoinstall
2026-08-20
5 min read

จะ optimize อัตราการยินยอม (Opt-In) ของ App Tracking Transparency (ATT) ได้อย่างไร? การปรับปรุงประสบการณ์การขออนุญาต ATT เกี่ยวข้องกับการให้บริบทก่อนการขออนุญาตที่ชัดเจน การเขียนคำอธิบาย NSUserTrackingUsageDescription ให้แม่นยำ และการเลือกจุดที่เหมาะสมในเส้น ใช้งานของผู้ใช้ (User Journey) เพื่อแสดงคำขอสิทธิ์ของระบบ ผลลัพธ์ต่ออัตราการให้สิทธิ์ควรได้รับการประเมินจากข้อมูลจริง

Identifier for Advertisers (IDFA) คือตัวระบุอุปกรณ์ที่สามารถรีเซ็ตได้ซึ่ง Apple จัดเตรียมไว้ เพื่อใช้สำหรับการระบุแหล่งที่มาของการตลาด (Marketing Attribution) และการวัดผลบน iOS ภายใต้กรอบงาน App Tracking Transparency (ATT) แอปพลิเคชันจะสามารถเข้าถึง IDFA ได้หลังจากได้รับอนุญาตอย่างชัดเจนจากผู้ใช้ผ่านหน้าต่างขอสิทธิ์ ATTrackingManager เท่านั้น

คำศัพท์ คำอธิบาย
IDFA ตัวระบุสำหรับการตลาดระดับแพลตฟอร์มของ Apple ซึ่งอยู่ภายใต้กรอบงาน App Tracking Transparency
App Tracking Transparency กรอบงานของ Apple ที่กำหนดให้ต้องมีการขออนุญาตจากผู้ใช้ก่อนที่จะติดตามผู้ใช้ข้ามแอปและเว็บไซต์
ATTrackingManager API ดั้งเดิมของ AppTrackingTransparency ที่ใช้สำหรับร้องขอสิทธิ์การติดตาม
Pre-Permission Primer หน้าจอภายในแอปที่กำหนดเอง ซึ่งแสดงผลก่อนหน้าต่างระบบเพื่ออธิบายเหตุผลที่มีการขอสิทธิ์

เศรษฐศาสตร์ของการเข้าถึง IDFA และการ optimization ความยินยอม ATT

บทบาทของการเข้าถึง IDFA ที่ได้รับอนุญาตในการวัดผล iOS สมัยใหม่

การเข้าถึง IDFA ที่ได้รับอนุญาตสามารถสนับสนุนเวิร์กโฟลว์การวัดผลและการระบุแหล่งที่มาของการตลาดระดับผู้ใช้ เมื่อการใช้ข้อมูลการติดตามของแอปพลิเคชันเป็นไปตาม ATT และข้อกำหนดของพันธมิตรด้านการตลาดและการวัดผล ในกรณีที่ไม่สามารถใช้งานสิทธิ์การติดตามได้ ทีมงานที่ยังคงต้องการเครื่องมือวัดผลสามารถเลือกใช้แนวทางที่ได้รับอนุญาตแยกต่างหากและจัดการผ่านแพลตฟอร์ม เช่น AdAttributionKit หรือการผสานการทำงาน SKAdNetwork ที่มีอยู่

เมื่อได้รับอนุญาต IDFA จะทำหน้าที่เป็นคีย์เชื่อมโยงข้อมูลแบบ deterministic สำหรับการผสานการทำงานกับเครือข่ายพันธมิตรที่รองรับ ช่วยให้สามารถประเมินผลลัพธ์การแปลงระดับแคมเปญได้โดยไม่ต้องอาศัยการจำลองทางสถิติ แต่หากไม่ได้รับอนุญาต แอปพลิเคชันจะเปลี่ยนผ่านการวัดผลไปยังกรอบงานดั้งเดิมของแพลตฟอร์มแทน

ปัญหาของการแสดงหน้าต่างแจ้งเตือนทันทีที่เปิดแอปครั้งแรก (Cold-Launch Prompts)

การขอสิทธิ์การติดตามจากผู้ทันทีเมื่อเปิดแอปครั้งแรกเป็นสิ่งที่ Apple อนุญาตในเชิงเทคนิค แต่อาจให้บริบทไม่เพียงพอต่อการตัดสินใจอย่างมีข้อมูล เนื่องจากผู้ใช้ยังไม่ทันได้สัมผัสกับฟังก์ชันการทำงานของแอปพลิเคชัน:

  • ขาดความไว้วางใจในตัวผลิตภัณฑ์: ผู้ใช้ใหม่ยังไม่ทันได้สร้างความมั่นใจในฟังก์ชันการทำงาน คุณค่าของแบรนด์ หรือแนวปฏิบัติด้านความปลอดภัยของข้อมูลในแอปพลิเคชัน
  • บริบทที่ไม่ชัดเจน: กล่องโต้ตอบของระบบปรากฏขึ้นโดยไม่มีคำอธิบายล่วงหน้า ทำให้ผู้ใช้ที่มีความระมัดระวังเลือกตัวเลือก "ขอให้แอปไม่ติดตาม" เป็นค่าเริ่มต้น
  • ความล้าจากการขอสิทธิ์ (Permission Fatigue): การซ้อนทับกล่องโต้ตอบขอสิทธิ์ของระบบหลายรายการ (เช่น การแจ้งเตือนพุช, ATT และตำแหน่งที่ตั้ง) ระหว่างการเริ่มใช้งานแอปครั้งแรกจะสร้างความยุ่งยากและเพิ่มอัตราการเลิกใช้งานตั้งแต่เริ่มต้น เอกสาร API ของ Apple ระบุว่าหากมีคำขอสิทธิ์ที่ค้างอยู่ คำขอสิทธิ์ในลำดับถัดไปจะไม่แสดงขึ้นมา

ATT opt in permission journey and primer flow

การประเมินประสิทธิภาพการ Opt-In ด้วยข้อมูลจริง

อัตราความยินยอมที่สามารถทำได้จะแตกต่างกันไปตามหมวดหมู่ของแอป ความเชื่อมั่นของกลุ่มเป้าหมาย จังหวะเวลาในการแสดงหน้าต่างแจ้งเตือน และความชัดเจนของข้อความ ทีมงานควรประเมินรูปแบบการ optimization ผ่านการทดสอบ A/B แบบควบคุม แทนที่จะอิงตามเกณฑ์มาตรฐานอุตสาหกรรมตายตัว

ดูเพิ่มเติม: IDFA ──> โมเดลการระบุแหล่งที่มาบนมือถือ

กลไกทางเทคนิคของกรอบงาน AppTrackingTransparency

สถานะการให้สิทธิ์ทั้ง 4 รูปแบบ

การเข้าถึง IDFA ถูกควบคุมอย่างเข้มงวดโดย ATTrackingManager.AuthorizationStatus enum:

  • notDetermined (0): ผู้ใช้ยังไม่เห็นกล่องโต้ตอบขอสิทธิ์
  • restricted (1): อุปกรณ์ถูกจำกัดด้วยการควบคุมโดยผู้ปกครอง, โปรไฟล์การกำหนดค่าทางการศึกษา หรือ MDM ขององค์กร จึงไม่สามารถให้สิทธิ์การติดตามได้และปุ่มสลับการตั้งค่าจะถูกปิดการใช้งาน
  • denied (2): แอปไม่มีสิทธิ์เข้าถึงข้อมูลที่เกี่ยวข้องกับแอปเพื่อการติดตาม หลังจากที่ผู้ใช้ปฏิเสธคำขอ
  • authorized (3): ผู้ใช้ออนุญาตให้มีการติดตาม บนอุปกรณ์ iOS และ iPadOS ที่รองรับ โดยปกติจะอนุญาตให้เข้าถึงตัวระบุการตลาดที่ไม่ใช่ค่าศูนย์

ATT authorization status and IDFA behavior

กฎการแสดงหน้าต่างระบบครั้งเดียว

ระบบปฏิบัติการ iOS บังคับใช้กฎการแสดงผลครั้งเดียวสำหรับ ATTrackingManager.requestTrackingAuthorization เมื่อผู้ใช้โต้ตอบกับหน้าต่างโมดอลของระบบโดยเลือก “อนุญาต” หรือ “ขอให้แอปไม่ติดตาม” แล้ว ระบบจะจดจำสถานะที่กำหนดนั้นและจะไม่แสดงหน้าต่างแจ้งเตือนอีกตลอดการติดตั้งแอปพลิเคชันนั้น

แม้ว่าหน้าต่างแจ้งเตือนของระบบจะไม่ปรากฏขึ้นเป็นครั้งที่สอง แต่ผู้ใช้สามารถปรับเปลี่ยนการอนุญาตการติดตามได้ด้วยตนเองตลอดเวลาภายในแอปพลิเคชันการตั้งค่า (Settings) ของ iOS

วิธีที่ iOS บังคับให้ตัวระบุเป็นศูนย์เมื่อมีการปฏิเสธสิทธิ์การติดตาม

บน iOS 14.5 ขึ้นไป ตัวระบุการตลาดมักจะส่งค่าเป็นศูนย์ทั้งหมด (00000000-0000-0000-0000-000000000000) เมื่อไม่ได้รับอนุญาตให้ติดตาม นักพัฒนาควรตรวจสอบทั้งสถานะการให้สิทธิ์ ATT และค่าตัวระบุที่ส่งกลับมาตามความต้องการ แทนที่จะสมมติว่าสตริงที่ถูกแคชไว้ยังคงใช้งานได้ตลอดการเปิดแอปพลิเคชัน

สถาปัตยกรรม UX อัตราการแปลงสูง: กลยุทธ์ Pre-Permission Primer

กายผ่าของตัวชี้แนะบริบทที่มีประสิทธิภาพ: ข้อจำกัดตามหลัก HIG ของ Apple

อ้างอิงจาก หลักเกณฑ์อินเทอร์เฟซมนุษย์ของ Apple ด้านความเป็นส่วนตัว (Apple’s Human Interface Guidelines on Privacy) แอปพลิเคชันสามารถแสดงหน้าจอแจ้งเตือนล่วงหน้าที่กำหนดเองก่อนหน้าต่างขอสิทธิ์ของระบบได้ หากจำเป็นต้องมีบริบทเพิ่มเติม อย่างไรก็ตาม Apple กำหนดกฎการออกแบบที่เข้มงวดสำหรับหน้าจออธิบายล่วงหน้าเหล่านี้:

  • ปุ่มดำเนินการเดี่ยว: หน้าจออธิบายล่วงหน้าต้องมีปุ่มเพียงปุ่มเดียว (เช่น “ดำเนินการต่อ” หรือ “ถัดไป”) ที่นำไปสู่หน้าต่างระบบโดยตรง ห้ามมีปุ่ม “ยกเลิก”, “ปิด” หรือ “ยังไม่ใช่ตอนนี้” ที่เป็นการเลี่ยงหรือชะลอการแจ้งเตือนของระบบ
  • ห้ามเลียนแบบ UI ของระบบ: หน้าจออธิบายล่วงหน้าต้องไม่เลียนแบบรูปลักษณ์ของกล่องแจ้งเตือนระบบ iOS ดั้งเดิม หรือแสดงปุ่มจำลองที่มีป้ายกำกับว่า “อนุญาต”
  • ห้ามใช้ภาพชักจูง: อินเทอร์เฟซต้องไม่ใช้กราฟิก ลูกศร หรือสไตล์ที่มีความคอนทราสต์สูงซึ่งออกแบบมาเพื่อชักใยหรือชี้นำผู้ใช้ให้เลือก “อนุญาต” ในหน้าต่างระบบถัดไป

การปฏิบัติตามแนวทางตรวจสอบ App Store ข้อ 5.1.2

ภายใต้ แนวทางตรวจสอบ App Store ของ Apple ส่วน 5.1.2 Apple ได้บังคับใช้ขอบเขตที่ชัดเจนเกี่ยวกับการขอสิทธิ์:

  • ข้อห้ามในการให้สิ่งจูงใจเพื่อการติดตาม: ห้ามมิให้แอปเสนอสิ่งจูงใจทางการเงิน สกุลเงินเสมือน เนื้อหาพรีเมียม หรือส่วนลด เพื่อแลกกับการให้ความยินยอม ATT การกระทำดังกล่าวละเมิดแนวทางข้อ 5.1.2 และอาจส่งผลให้แอปถูกปฏิเสธ
  • ห้ามปิดกั้นฟังก์ชันการทำงานหลัก: แอปพลิเคชันไม่สามารถบล็อกฟีเจอร์หลัก ขัดขวางการสร้างบัญชี หรือลดทอนประสิทธิภาพของแอปได้หากผู้ใช้ปฏิเสธสิทธิ์การติดตาม
  • ความสำคัญสูงสุดที่ตัวผู้ใช้: การตัดสินใจติดตามที่แท้จริงของผู้ใช้จะต้องเกิดขึ้นบนหน้าต่างระบบดั้งเดิมของ Apple เสมอ

ATT pre permission primer design rules



Stage 1: User Onboarding / Core Value Realization
                      │
                      ▼
Stage 2: Contextual Pre-Permission Primer Screen
         (Single "Continue" Action ── Explains Purpose)
                      │
                      ▼
Stage 3: Native iOS ATTrackingManager System Modal
         (User Selects "Allow" or "Ask App not to Track")
                      │
         ┌────────────┴────────────┐
         ▼                         ▼
   [.authorized]             [.denied]
   ATT Authorized       Graceful Fallback
   (IDFA normally       to Platform APIs
    available)          (AdAttributionKit / SKAN)

การ optimization สตริง NSUserTrackingUsageDescription

การกำหนดค่า Info.plist เพื่อความโปร่งใสของวัตถุประสงค์

คีย์ NSUserTrackingUsageDescription ในไฟล์ Info.plist ทำหน้าที่กำหนดข้อความอธิบายที่จะแสดงผลโดยตรงภายในหน้าต่างแจ้งเตือน ATT ของระบบ Apple อ้างอิงตามเอกสารของ Apple ข้อความนี้ต้องกระชับ เฉพาะเจาะจง และอธิบายอย่างถูกต้องว่าข้อมูลการติดตามถูกนำไปใช้อย่างไร

การทดสอบรูปแบบสตริงอธิบายวัตถุประสงค์ที่ชัดเจนโดยไม่เปลี่ยนความหมายหลัก

เมื่อทำการทดสอบรูปแบบสตริง ทุกรูปแบบที่ทดสอบจะต้องอธิบายแนวปฏิบัติตามการติดตามจริงของแอปพลิเคชันอย่างถูกต้องและครบถ้วน:

  • เน้นการปรับแต่งส่วนบุคคล (Personalization Focus): อธิบายว่าข้อมูลถูกนำมาใช้อย่างไรในการปรับแต่งคำแนะนำเนื้อหาและข้อเสนอผลิตภัณฑ์
  • เน้นความเกี่ยวข้องของโปรโมชั่น (Ad Relevance Focus): อธิบายว่าข้อมูลถูกใช้เพื่อส่งมอบโปรโมชั่นที่เกี่ยวข้องและหลีกเลี่ยงการแสดงโฆษณาที่ซ้ำซ้อน
  • เน้นการวัดผลแคมเปญ (Campaign Measurement Focus): อธิบายว่าข้อมูลถูกนำมาใช้อย่างไรในการวัดประสิทธิภาพของพันธมิตรทางการตลาด

การกำหนดค่าด้านล่างนี้แสดงตัวอย่างของ NSUserTrackingUsageDescription โดยควรใช้ต่อเมื่อข้อความดังกล่าวอธิบายแนวทางการติดตามจริงของแอปได้อย่างแม่นยำเท่านั้น:


```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>ข้อมูลของคุณจะถูกนำไปใช้เพื่อส่งมอบคำแนะนำผลิตภัณฑ์เฉพาะบุคคล ข้อเสนอโปรโมชั่นที่เกี่ยวข้อง และวัดผลประสิทธิภาพของแคมเปญการตลาด</string>
</dict>
</plist>

การออกแบบจังหวะเวลาในการกระตุ้นคำขอ (Prompt Timing) ในวงจรการใช้งานของผู้ใช้

ข้อ  พิจารณาเรื่องจังหวะเวลาตลอดเส้นทางการใช้งานของผู้ใช้

แม้ว่าการขอสิทธิ์ ATT ในการเปิดแอปครั้งแรกจะสามารถทำได้ในแง่เทคนิค แต่การแสดงหน้าต่างแจ้งเตือนหลังจากที่ผู้ใช้ได้สัมผัสกับประโยชน์เบื้องต้นของผลิตภัณฑ์แล้ว สามารถช่วยให้บริบทที่เกี่ยวข้องกับคำขอสิทธิ์มีความชัดเจนมากขึ้น:

  • การกระตุ้นหลังการเริ่มต้นใช้งาน (Post-Onboarding Trigger): แสดงหน้าต่างแจ้งเตือนหลังจากผู้ใช้ตั้งค่าบัญชีเสร็จสิ้นและกำหนดค่าความต้องการเบื้องต้นเรียบร้อยแล้ว
  • การกระตุ้นตามเหตุการณ์สำคัญ (Contextual Milestone Trigger): แสดงหน้าต่างแจ้งเตือนหลังจากทำกิจกรรมหลักของผู้ใช้สำเร็จ (เช่น เล่นบทช่วยสอนในเกมจบ, บันทึกสินค้าโปรดในแอปช้อปปิ้ง, หรือบุ๊กมาร์กบทความในแอปเนื้อหา)

การใช้งาน ATTrackingManager เชิงวิศวกรรมด้วยภาษา Swift

การจัดการสถานะการทำงานของแอปพลิเคชันและความปลอดภัยของเธรด (Thread Safety)

อ้างอิงจากเอกสาร API ของ Apple ฟังก์ชัน ATTrackingManager.requestTrackingAuthorization จะแสดงหน้าต่างโมดอลเฉพาะเมื่อสถานะของแอปพลิเคชันเป็น .active เท่านั้น หากมีหน้าต่างขอสิทธิ์อื่นกำลังทำงานอยู่หรือรอดำเนินการ หน้าต่างแจ้งเตือนของระบบจะไม่ปรากฏขึ้น และระบบปฏิบัติการจะไม่จัดคิวคำขอที่ส่งมาพร้อมกัน

ATT prompt timing and request conditions

การใช้งานด้านล่างนี้เป็นการแยกการจัดการสถานะการอนุญาตออกจากหน้าจออธิบายล่วงหน้าแบบกำหนดเอง:

import UIKit
import AppTrackingTransparency
import AdSupport

final class ATTManager {

    static let shared = ATTManager()
    private init() {}

    /// Evaluates current authorization status
    var currentStatus: ATTrackingManager.AuthorizationStatus {
        return ATTrackingManager.trackingAuthorizationStatus
    }

    /// Determines if tracking authorization can be presented
    var canRequestAuthorization: Bool {
        return currentStatus == .notDetermined
    }

    /// Requests tracking authorization with application active state verification
    /// - Parameter completion: Closure returning the resolved authorization status
    func requestAuthorization(completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void) {
        guard canRequestAuthorization else {
            completion(currentStatus)
            return
        }

        // Verify application is active before invoking requestTrackingAuthorization
        guard UIApplication.shared.applicationState == .active else {
            print("ATT request skipped: application is not active. Call again once active if status remains notDetermined.")
            completion(currentStatus)
            return
        }

        DispatchQueue.main.async {
            ATTrackingManager.requestTrackingAuthorization { status in
                DispatchQueue.main.async {
                    switch status {
                    case .authorized:
                        // Read the current advertising identifier on demand; do not persist a cached IDFA.
                        let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
                        print("ATT Authorized - IDFA available: \(idfa)")
                    case .denied:
                        print("ATT Denied - Advertising identifier returns zeroes")
                    case .restricted:
                        print("ATT Restricted by system profile")
                    case .notDetermined:
                        print("ATT State unresolved")
                    @unknown default:
                        print("ATT Unknown state encountered")
                    }
                    completion(status)
                }
            }
        }
    }
}

/// Illustrative custom UIViewController for a HIG-aligned pre-permission primer
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
        
        // Prevent interactive swipe-to-dismiss when presented modally to ensure single-path navigation
        isModalInPresentation = true

        titleLabel.text = "ช่วยเราปรับแต่งประสบการณ์การใช้งานของคุณให้ดียิ่งขึ้น"
        titleLabel.font = .boldSystemFont(ofSize: 20)
        titleLabel.textAlignment = .center
        titleLabel.numberOfLines = 0

        descriptionLabel.text = "เราใช้ข้อมูลเพื่อปรับแต่งคำแนะนำผลิตภัณฑ์และส่งมอบข้อเสนอโปรโมชั่นที่เกี่ยวข้อง ในหน้าจอถัดไป คุณจะเห็นหน้าต่างขอสิทธิ์มาตรฐานของ Apple เพื่อยืนยันการเลือกของคุณ"
        descriptionLabel.font = .systemFont(ofSize: 15)
        descriptionLabel.textAlignment = .center
        descriptionLabel.textColor = .secondaryLabel
        descriptionLabel.numberOfLines = 0

        // Apple HIG guidance calls for a single Continue or Next action
        continueButton.setTitle("ดำเนินการต่อ", 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() {
        // Presentation and dismissal mechanics are illustrative and should be adapted to the app's navigation architecture.
        dismiss(animated: true) { [weak self] in
            self?.onContinueTapped?()
        }
    }
}

การกู้คืนหลังการปฏิเสธสิทธิ์: นำทางผู้ใช้ไปยังการตั้งค่าระบบโดยไม่ละเมิดนโยบาย

เมื่อใดควรแนะนำเวิร์กโฟลว์การตั้งค่าสำรอง

เมื่อผู้ใช้เลือก “ขอให้แอปไม่ติดตาม” สถานะการอนุญาตจะเปลี่ยนเป็น .denied และการเรียกใช้งาน requestTrackingAuthorization ในครั้งต่อๆ ไปจะคืนค่าเป็น .denied ทันทีโดยไม่แสดงหน้าต่างแจ้งเตือน อย่างไรก็ตาม หากในภายหลังผู้ใช้เปิดใช้งานฟีเจอร์ที่ได้รับประโยชน์จากการติดตามอย่างชัดเจน (เช่น การขอตั้งค่าโฆษณาเฉพาะบุคคลในโปรไฟล์บัญชี) แอปสามารถจัดเตรียมเส้นทางที่ไม่บังคับขู่เข็ญเพื่อไปยังหน้าการตั้งค่าของ iOS ได้

การใช้ UIApplication.openSettingsURLString

เพื่อนำทางผู้ใช้ไปยังหน้าการตั้งค่าของแอป ให้ใช้ UIApplication.openSettingsURLString:

if let settingsURL = URL(string: UIApplication.openSettingsURLString),
   UIApplication.shared.canOpenURL(settingsURL) {
    UIApplication.shared.open(settingsURL, options: [:], completionHandler: nil)
}

โปรดทราบว่า API นี้จะเปิดหน้าการตั้งค่าเฉพาะของแอปพลิเคชัน โดยจะไม่ส่งลิงก์เชิงลึกไปยังหน้าการตั้งค่าหลักอย่าง การตั้งค่า > ความเป็นส่วนตัวและความปลอดภัย > การติดตาม โดยตรง

ขอบเขตของนโยบาย App Store

  • ห้ามแจ้งเตือนเซ้าซี้ซ้ำๆ: ห้ามแสดงแบนเนอร์แจ้งเตือนซ้ำๆ เพื่อกระตุ้นให้ผู้ใช้เปิดใช้งานการติดตามในการตั้งค่า
  • ห้ามล็อกฟีเจอร์: ห้ามปิดการใช้งานฟังก์ชันการทำงานหลักเนื่องจากการติดตามยังคงถูกปิดอยู่ในการตั้งค่า

เมทริกซ์การตัดสินใจเปรียบเทียบ: กลยุทธ์ Pre-Permission เทียบกับการแจ้งเตือนเมื่อเปิดแอปครั้งแรก

มิติ หน้าต่างแจ้งเตือนเมื่อเปิดแอปครั้งแรก (Default Cold-Launch Prompt) โมดอลขอสิทธิ์แบบบังคับล็อก (Hard-Gated Permission Modal) หน้าจออธิบายล่วงหน้าที่สอดคล้องกับ HIG (HIG-Aligned Pre-Permission Primer)
บริบทของผู้ใช้ก่อนหน้าต่างแจ้งเตือน ต่ำ (ไม่มีการโต้ตอบกับผลิตภัณฑ์) แตกต่างกันไป (บล็อกการเข้าถึง) มีบริบท (แสดงผลหลังจากโต้ตอบในส่วนที่เกี่ยวข้อง)
คำแนะนำ UI/สิทธิ์ของ Apple อนุญาตเมื่อคำขอและการใช้ข้อมูลเป็นไปตามข้อกำหนด ไม่อนุญาตเมื่อการเข้าถึงหรือผลตอบแทนขึ้นอยู่กับการติดตาม อนุญาตเมื่อปฏิบัติตามข้อจำกัดหน้าจอเตือนล่วงหน้าของ HIG และกฎการติดตาม
ข้อจำกัด UI หน้าจอเตือนล่วงหน้าของ Apple ไม่เกี่ยวข้อง ไม่เกี่ยวข้อง ปุ่มดำเนินการต่อเนื่อง/ถัดไปเดี่ยว; ไม่มีหน้าต่างแจ้งเตือนปลอม
จังหวะเวลาในการขัดจังหวะเพื่อขอสิทธิ์ ทันทีที่เปิดแอป บล็อกการใช้งาน เหตุการณ์สำคัญตามบริบท
อัตรา Opt-In ที่สังเกตได้ ต้องวัดผลจากข้อมูลจริง ไม่อนุญาต ต้องวัดผลจากข้อมูลจริง

คำถามที่พบบ่อย (FAQ)

แอปพลิเคชันสามารถเสนอสกุลเงินในแอปหรือส่วนลดเพื่อแลกกับการให้สิทธิ์ ATT ได้หรือไม่?
ไม่ได้ แนวทางตรวจสอบ App Store ของ Apple ข้อ 5.1.2 ห้ามอย่างชัดเจนในการเสนอสิ่งจูงใจ เช่น สกุลเงินเสมือน ฟีเจอร์เสริม เงินสด หรือส่วนลด เพื่อแลกกับการยินยอมให้ติดตามของผู้ใช้ การกระทำดังกล่าวละเมิดแนวทางของแพลตฟอร์มและอาจส่งผลให้แอปถูกปฏิเสธ
แอปสามารถแสดงหน้าต่างแจ้งเตือน ATT ครั้งที่สองได้หรือไม่หากผู้ใช้เลือก "ขอให้แอปไม่ติดตาม" ในตอนแรก?
ไม่ได้ iOS อนุญาตให้แสดงหน้าต่างแจ้งเตือนคำขอสิทธิ์ดั้งเดิม `ATTrackingManager.requestTrackingAuthorization` ได้เพียงครั้งเดียวต่อการติดตั้งแอปหนึ่งครั้ง หากผู้ใช้ปฏิเสธการให้สิทธิ์ การเรียกใช้งานในครั้งถัดไปจะคืนค่าเป็น `.denied` โดยไม่แสดงหน้าต่างแจ้งเตือนอีก ผู้ใช้จะต้องอัปเดตการตั้งค่าการติดตามด้วยตนเองในการตั้งค่า (Settings) ของ iOS หากต้องการปรับเปลี่ยนการอนุญาต
หน้าจออธิบายก่อนขอสิทธิ์ (Pre-permission primer) ขัดต่อแนวทาง App Store ของ Apple หรือไม่?
Apple อนุญาตให้มีหน้าจออธิบายล่วงหน้าแบบกำหนดเองเมื่อจำเป็นต้องมีบริบทเพิ่มเติม โดยต้องปฏิบัติตามหลักเกณฑ์อินเทอร์เฟซมนุษย์ (Human Interface Guidelines): จะต้องใช้ปุ่มดำเนินการต่อเนื่องหรือถัดไปเพียงปุ่มเดียวที่นำไปสู่หน้าต่างระบบโดยตรง ห้ามมีปุ่มยกเลิกหรือปิดบนหน้าจอนี้ ห้ามเลียนแบบหน้าต่างแจ้งเตือนระบบดั้งเดิม และห้ามใช้ข้อความหรือสัญญาณภาพที่กดดันให้ผู้ใช้เลือกอนุญาต

สรุปและกรอบการตัดสินใจ

การปรับปรุงประสบการณ์การขอสิทธิ์ ATT ต้องอาศัยการเปิดเผยวัตถุประสงค์ที่ชัดเจนและการกำหนดจังหวะเวลาที่สอดคล้องกับบริบท เมื่อจำเป็นต้องมีคำอธิบายเพิ่มเติม หน้าจออธิบายล่วงหน้าที่สอดคล้องกับหลักเกณฑ์ HIG สามารถช่วยให้บริบทก่อนหน้าต่างระบบ พร้อมทั้งปรับประสบการณ์การขอสิทธิ์ให้สอดคล้องกับแนวทางการติดตามและอินเทอร์เฟซที่ Apple เผยแพร่

หากยังคงต้องการบริบทการระบุแหล่งที่มาหรือการเริ่มต้นใช้งานหลังจากที่ถูกปฏิเสธสิทธิ์ ATT แอปพลิเคชันสามารถเลือกใช้กลไกที่ได้รับอนุญาตแยกต่างหาก เช่น AdAttributionKit, การผสานการทำงาน SKAdNetwork ที่มีอยู่, หรือการกำหนดเส้นทางตามบริบทของผู้ใช้ที่เป็นของแอปพลิเคชันเองอย่างแท้จริง ซึ่งยังคงอยู่ภายใต้กฎการติดตามของ Apple

สำหรับพฤติกรรมการกำหนดเส้นทางตามบริบทและการระบุแหล่งที่มาเฉพาะของผลิตภัณฑ์ สามารถศึกษาเพิ่มเติมได้ที่ เอกสารประกอบของ OpoInstall และประเมินการนำไปใช้งานเทียบกับข้อกำหนดการติดตามของ Apple ที่เกี่ยวข้อง

วัสดุและเอกสารที่เกี่ยวข้อง

  • แนวคิด: App Tracking Transparency, การ optimization IDFA, หน้าจออธิบายก่อนขอสิทธิ์ (Pre-Permission Primers), ฟันเนลความยินยอม

  • เทคโนโลยี: StoreKit Framework, AppTrackingTransparency Framework, OpoInstall Mobile SDK

  • มาตรฐาน: หลักเกณฑ์อินเทอร์เฟซมนุษย์ของ Apple ด้านความเป็นส่วนตัว, แนวทางตรวจสอบ App Store ส่วน 5.1.2

  • API: ATTrackingManager.requestTrackingAuthorization, UIApplication.openSettingsURLString, ASIdentifierManager

เอกสารอย่างเป็นทางการ

Share this article

Keep Discovering

วิธีติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์โดยใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจ

วิธีติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์โดยใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจ

เรียนรู้วิธีใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจเพื่อติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์ แบ่งกลุ่มสื่อโฆษณาภาคสนาม และคำนวณต้นทุนต่อการติดตั้งที่มีประสิทธิภาพ (eCPI) รวมถึงผลตอบแทนจากการลงทุนในสื่อ (ROAS) ได้อย่างแม่นยำ

Walmart เปิดตัว Agent Gateway? เจาะลึกระบบช้อปปิ้งด้วย AI ทำงานอย่างไร

Walmart เปิดตัว Agent Gateway? เจาะลึกระบบช้อปปิ้งด้วย AI ทำงานอย่างไร

Walmart เปิดตัว Agent Gateway ผ่านโปรโตคอล MCP พร้อมฟีเจอร์ Agent Profiles, ระบบควบคุมการใช้จ่าย และ API ค้าปลีกอัตโนมัติที่ช่วยยกระดับวงการคอมเมิร์ซ AI

Amap แสดงตัวอย่างการนำทางแบบแบ่งหน้าจอสำหรับ iPhone Duo? ทำงานอย่างไร

Amap แสดงตัวอย่างการนำทางแบบแบ่งหน้าจอสำหรับ iPhone Duo? ทำงานอย่างไร

Amap แสดงตัวอย่างการนำทางแบบมุมมองคู่และแบ่งหน้าจอสำหรับ iPhone Duo ค้นหาว่าเลย์เอาต์แผนที่แบบพับได้และการส่งผ่านตำแหน่งข้ามแอปทำงานอย่างไร