반응형
리젝트 메시지
Guideline 2.1 - Information Needed
The app uses the AppTrackingTransparency framework, but we are unable to locate
the App Tracking Transparency permission request when reviewed on iPadOS 18.6.
왜 리젝트됐을까?
제 앱은 Google AdMob을 사용하는 메트로놈 앱입니다. 리젝트된 이유를 분석해보니
1. ATT 패키지는 설치했지만 실제로 사용하지 않음
- pubspec.yaml에 app_tracking_transparency 패키지 포함 ✅
- Info.plist에 권한 설명 추가 ✅
- 실제 권한 요청 코드는 없음 ❌
2. Apple의 판단
- "ATT 프레임워크가 있으니 사용자를 추적할 의도가 있는데, 왜 권한을 요청하지 않나?"
- 특히 iPadOS 18.6 리뷰에서 이 문제를 발견
ATT가 뭐고 왜 필요한가?
App Tracking Transparency (ATT)란?
iOS 14.5부터 Apple이 도입한 개인정보 보호 기능입니다. 앱이 사용자를 "추적"하려면 반드시 허락을 받아야 합니다.
맞춤형 광고란?
- 맞춤형 광고: 사용자의 관심사, 행동 패턴을 분석해서 보여주는 광고
- 예: 운동 앱을 자주 쓰는 사용자 → 운동화 광고
- 일반 광고: 모든 사용자에게 동일하게 보여주는 광고
IDFA (Identifier for Advertisers)
- Apple 기기의 광고 식별자
- ATT 권한이 있어야만 접근 가능
- 광고 네트워크가 사용자를 식별하고 맞춤형 광고를 제공하는데 사용
수익 차이
- ATT 권한 O → IDFA 사용 가능 → 맞춤형 광고 → 높은 광고 수익 💰
- ATT 권한 X → IDFA 사용 불가 → 일반 광고만 → 낮은 광고 수익 📉
해결 방법
1. 필요한 패키지 설치
# pubspec.yaml
dependencies:
app_tracking_transparency: ^2.0.6
2. Info.plist 설정 확인
<key>NSUserTrackingUsageDescription</key>
<string>This identifier will be used to deliver personalized ads to you.</string>
3. 권한 요청 코드 추가
// main.dart
import 'dart:io';
import 'package:app_tracking_transparency/app_tracking_transparency.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// iOS에서만 ATT 권한 요청
if (Platform.isIOS) {
try {
final status = await AppTrackingTransparency.requestTrackingAuthorization();
if (status == TrackingStatus.authorized) {
print('맞춤형 광고 가능!');
} else {
print('일반 광고만 표시');
}
} catch (e) {
print('ATT 권한 요청 실패: $e');
}
}
// AdMob 초기화 (ATT 권한 요청 후에!)
MobileAds.instance.initialize();
runApp(MyApp());
}
주의사항
1. ATT 권한 요청 타이밍
- 앱 시작 직후가 가장 안전
- AdMob 초기화 전에 요청해야 함
2. Android는 해당 없음
- ATT는 iOS만의 정책
- Platform.isIOS 체크 필수
3. 사용자가 거부해도 앱은 작동해야 함
- 권한 거부 시 일반 광고만 표시
- 앱 기능 제한 금지
실제 영향
ATT 도입 후 통계
- 평균 ATT 허용률: 약 25-30%
- 맞춤형 광고 eCPM이 일반 광고보다 2-3배 높음
- 수익 감소를 최소화하려면 UX 개선 필요
결론
Apple은 사용자 프라이버시를 매우 중요하게 생각합니다. AdMob 같은 광고 네트워크를 사용한다면
- ATT 패키지를 설치했으면 반드시 사용하기
- 사용하지 않을 거면 완전히 제거하기
- 애매한 중간 상태 = 리젝트
저처럼 "패키지만 설치하고 실제로 안 쓰는" 실수를 하지 마세요!
반응형
'앱 개발' 카테고리의 다른 글
| 구글 플레이스토어 vs 앱스토어: 실제 출시 경험을 통해 본 플랫폼 비교 (0) | 2025.09.16 |
|---|---|
| iOS 앱스토어 출시 완벽 가이드: 인앱결제부터 심사까지 (2) (0) | 2025.09.11 |
| iOS 앱스토어 출시 완벽 가이드: 인앱결제부터 심사까지 (1) (0) | 2025.09.11 |
| 메트로놈 앱 성능 최적화 사례, 크로스 플랫폼 개발 중 삽입된 로그가 성능을 저하시킨 사례 (0) | 2025.08.25 |