คู่มือการ 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

Xiaomi เปิดตัวหุ่นยนต์ฮิวแมนนอยด์ 66 DoF ในงาน WRC 2026

Xiaomi เปิดตัวหุ่นยนต์ฮิวแมนนอยด์ 66 DoF ในงาน WRC 2026

Xiaomi จัดแสดงหุ่นยนต์ฮิวแมนนอยด์ต้นแบบรุ่นใหม่ที่มีความสามารถ 66 DoF เรียนรู้วิธีที่โมเดล VLA ใหม่และการทดสอบในโรงงานขับเคลื่อนการพัฒนา AI ทางกายภาพ

การ attribution แบบ Deterministic vs Probabilistic: ความแตกต่างและข้อแลกเปลี่ยน

การ attribution แบบ Deterministic vs Probabilistic: ความแตกต่างและข้อแลกเปลี่ยน

เปรียบเทียบการ attribution แบบ deterministic และ probabilistic ทำความเข้าใจการจับคู่คีย์ที่แน่นอน, แบบจำลองการประมาณทางสถิติ, กฎ Apple ATT และข้อแลกเปลี่ยนด้านความเป็นส่วนตัว

Keepace AI ผ่านการยื่นขออนุญาตสำเร็จ? การเปลี่ยนแปลงของการเติบโตแอปฟิตเนส

Keepace AI ผ่านการยื่นขออนุญาตสำเร็จ? การเปลี่ยนแปลงของการเติบโตแอปฟิตเนส

Keepace.ai ผ่านการยื่นขออนุญาตโมเดล AI ระดับประเทศแล้ว ค้นพบวิธีที่โมเดล AI ด้านกีฬาะเฉพาะทางกำลังพลิกโฉมการได้มาซึ่งผู้ใช้งาน การเริ่มต้นใช้งาน และการรักษาผู้ใช้งานของแอปฟิตเนส