노하우잇 » 마케팅 & 테크 실무 꿀팁 » 앱 추적 투명성 (App Tracking Transparency (ATT))

앱 추적 투명성 (App Tracking Transparency (ATT))

🔥 03. 퍼포먼스 마케팅 & 디지털 광고 유료 광고 및 미디어 바잉

앱 추적 투명성 (App Tracking Transparency (ATT))

App Tracking Transparency (ATT)

💡 3줄 핵심 꿀팁 요약

iOS ATT 동의율을 높이기 위해 시스템 권한 요청 팝업 직전에 자체 사전 안내 화면(Pre-prompt)을 노출하여 사용자에게 데이터 수집의 가치를 설득하고, 수락 유도 후 공식 ATT 팝업을 띄우는 전략이 필수적입니다. 사전 안내 화면에서 긍정적 인터랙션을 유도하면 평균 Opt-in 동의율을 15% 이상 끌어올릴 수 있습니다.

💡 3줄 핵심 꿀팁 요약

iOS ATT 동의율을 높이기 위해 시스템 권한 요청 팝업 직전에 자체 사전 안내 화면(Pre-prompt)을 노출하여 사용자에게 데이터 수집의 가치를 설득하고, 수락 유도 후 공식 ATT 팝업을 띄우는 전략이 필수적입니다. 사전 안내 화면에서 긍정적 인터랙션을 유도하면 평균 Opt-in 동의율을 15% 이상 끌어올릴 수 있습니다.

📖 개념 정의 및 실무 적용

앱 추적 투명성(ATT) 정책 도입 이후 iOS 환경에서 사용자 식별이 어려워지면서 퍼포먼스 마케팅의 리타게팅 효율 저하와 ROAS 측정 오류가 심각한 문제로 대두되었습니다. 기본 시스템 팝업을 무작정 띄우면 사용자는 경계심을 갖고 거부(Opt-out)를 누를 확률이 매우 높으며, 이는 한 번 거부되면 앱 내 설정으로 직접 들어가기 전까지 다시 묻지 못하는 치명적인 손실로 이어집니다.

이를 해결하기 위해 실무에서는 시스템 팝업 호출 전 자사 커스텀 UI로 구성된 Pre-prompt(소프트 프롬프트)를 활용합니다. 서비스 이용의 혜택과 데이터가 사용자 경험 개선에 어떻게 쓰이는지 자연스럽게 설명한 뒤 ‘계속하기’ 버튼을 누를 때만 공식 ATT 시스템 팝업을 호출함으로써, 거부율을 낮추고 동의율을 극대화하여 효율적인 미디어 바잉과 정확한 성과 측정 기반을 다질 수 있습니다.

💻 실무 활용 코드 스니펫 (SWIFT)

import UIKit
import AppTrackingTransparency
import AdSupport

class ATTManager {
    static let shared = ATTManager()
    
    func requestTrackingPermission(from viewController: UIViewController, completion: @escaping (Bool) -> Void) {
        if #available(iOS 14, *) {
            if ATSService.shared.currentStatus == .notDetermined {
                let alert = UIAlertController(
                    title: "맞춤형 혜택 안내",
                    message: "고객님께 딱 맞는 할인 혜택과 맞춤형 콘텐츠를 제공하기 위해 광고 식별자(IDFA) 접근 권한을 허용해주세요.",
                    preferredStyle: .alert
                )
                alert.addAction(UIAlertAction(title: "거절하기", style: .cancel) { _ in
                    completion(false)
                })
                alert.addAction(UIAlertAction(title: "동의하고 혜택받기", style: .default) { _ in
                    self.triggerSystemATT(completion: completion)
                })
                viewController.present(alert, animated: true, completion: nil)
            } else {
                completion(ATSService.shared.currentStatus == .authorized)
            }
        } else {
            completion(true)
        }
    }
    
    private func triggerSystemATT(completion: @escaping (Bool) -> Void) {
        if #available(iOS 14.5, *) {
            ATTrackingManager.requestTrackingAuthorization { status in
                DispatchQueue.main.async {
                    completion(status == .authorized)
                }
            }
        } else {
            completion(true)
        }
    }
}

⚡ 5분 만에 적용하는 실행 스텝

  1. 타겟 유저 세그먼트 정의: 앱 실행 시점에 ATT 상태가 ‘Not Determined(미결정)’ 상태인 신규 또는 기존 미응답 유저 식별
  2. Pre-prompt UI 기획 및 구현: 자사 브랜드 톤앤매너에 맞추어 데이터 활용 목적과 혜택을 강조하는 커스텀 인앱 팝업 개발
  3. 조건부 트리거 연동: 사용자가 Pre-prompt에서 ‘동의/계속’ 버튼을 터치했을 때만 Apple 공식 ATTrackingManager.requestTrackingAuthorization 함수 호출
  4. 성과 트래킹 및 최적화: GA4, MMP(Adjust, AppsFlyer 등)를 통해 Pre-prompt 노출 대비 최종 Opt-in 동의율 추적 및 문구 A/B 테스트 진행
🚀 실무자만 아는 한 끗 차이 Pro Tip

첫 앱 실행 직후 온보딩 과정에서 팝업을 띄우지 말고, 사용자가 핵심 가치나 유용한 콘텐츠를 경험한 직후(예: 첫 상품 조회 완료 또는 회원가입 직후)에 Pre-prompt를 노출하면 수락률이 대폭 상승합니다. 또한, 앱 내 설정 메뉴에 ATT 상태를 실시간 반영하여 거부한 유저가 언제든 권한을 변경할 수 있도록 유도 링크를 제공하는 것이 좋습니다.

⚠️ 흔히 하는 실수 및 주의사항

Pre-prompt에서 ‘거절하기’를 누른 유저에게 곧바로 시스템 ATT 팝업을 강제로 띄우는 행위는 Apple의 앱스토어 심사 지침(Guideline 5.1.1) 위반으로 리젝 사유가 되므로 절대 금지해야 합니다. 또한, ATT 팝업 호출 시점을 로딩 화면이나 네트워크 연결 직후에 배치하여 팝업이 유저의 액션 없이 무작위로 뜨게 만들면 동의율이 급감하므로 반드시 유저의 인터랙션 직후에 배치해야 합니다.

❓ 자주 묻는 질문 (FAQ)

Q. Pre-prompt를 사용하면 애플 앱스토어 심사에 걸리지 않나요?

A. 사전 안내 화면(Pre-prompt) 자체는 허용되지만, 공식 시스템 팝업 호출 전에 강제성을 띠거나 시스템 팝업을 우회하려는 목적, 또는 허위 혜택을 미끼로 강요하는 형태가 아니라면 심사를 통과합니다. 단, 거절을 선택했을 때 시스템 팝업을 띄우지 않고 자연스럽게 앱을 이용할 수 있도록 구현해야 합니다.

Q. 한 번 ‘거절(Opt-out)’을 누른 사용자에게 Pre-prompt나 시스템 팝업을 다시 띄울 수 있는 방법이 있나요?

A. 기술적으로 앱 내부에서 시스템 팝업을 다시 강제로 띄우는 것은 불가능합니다. 이미 거절한 유저가 설정에서 직접 권한을 허용하도록 유도하려면, 앱 내 고객 센터나 설정 메뉴에 ‘앱 추적 허용하러 가기’ 버튼을 배치하여 iOS 기기의 설정(Settings) 화면으로 다이렉트 딥링크를 제공하는 방식만 가능합니다.

위로 스크롤