App Tracking Transparency (ATT) — مکانیزم iOS که قبل از ردیابی در برنامهها و وبسایتها نیاز به رضایت صریح کاربر برای دسترسی به شناسه تبلیغاتی IDFA دارد. ATT که در iOS 14.5 معرفی شد، همه توسعهدهندگان را موظف کرد تا دیالوگ سیستمی درخواست مجوز ردیابی را نمایش دهند. به گفته Apple Developer Documentation، هر برنامهای که از IDFA برای تبلیغات هدفمند یا انتساب استفاده میکند، باید فریمورک ATT را یکپارچه کرده و مجوز دسترسی دریافت کند.
نکات اصلی
App Tracking Transparency فریمورکی از اپل برای محافظت از حریم خصوصی کاربران است که در iOS 14.5 معرفی شد. این فریمورک از برنامهها میخواهد قبل از استفاده از شناسه تبلیغاتی دستگاه (IDFA) برای ردیابی، رضایت صریح دریافت کنند.
پیش از ATT، توسعهدهندگان میتوانستند بدون درخواست IDFA را بخوانند که به شبکههای تبلیغاتی اجازه میداد پروفایل کاربران بسازند و فعالیت آنها را بین برنامهها و وبسایتها ردیابی کنند. اپل این رویکرد را نقض حریم خصوصی نامید و دیالوگ اجباری رضایت را معرفی کرد.
این فریمورک از iOS 14.0 در دسترس است، اما برای همه برنامههای استفادهکننده از IDFA با انتشار iOS 14.5 در آوریل 2021 اجباری شد. به گفته Flurry Analytics، پس از پیادهسازی ATT، کمتر از 25% کاربران در ایالات متحده با ردیابی موافقت کردند که بازار تبلیغات موبایل را به طور اساسی تغییر داد.
ATT وجود مجوز را از طریق یک دیالوگ سیستمی ویژه بررسی میکند که برنامه نمیتواند آن را تغییر دهد یا دور بزند. کاربر یک پاپآپ استاندارد با متنی که توسعهدهنده ارائه کرده میبیند و «اجازه بده» یا «از برنامه بخواه ردیابی نکند» را انتخاب میکند.
اپل ATT را به عنوان بخشی از استراتژی کلی حریم خصوصی قرار میدهد که شامل برچسب تغذیه حریم خصوصی در App Store و مانیفست حریم خصوصی نیز میشود. هر سه مکانیزم با هم کار میکنند: برچسبها نشان میدهند برنامه چه دادههایی جمعآوری میکند، مانیفست دلایل استفاده از API را اعلام میکند، و ATT به کاربر کنترل ردیابی را میدهد.
رد ردیابی عملکرد خود برنامه را مسدود نمیکند — کاربر میتواند از همه ویژگیها استفاده کند، اما شبکههای تبلیغاتی IDFA را برای شخصیسازی و انتساب دریافت نخواهند کرد. SKAdNetwork و Probabilistic Attribution از اپل به عنوان جایگزین IDFA مطرح شدند.
به گفته Branch Metrics، پس از پیادهسازی ATT، سهم برنامههایی که IDFA دریافت میکنند از 70% به 20% در مقیاس جهانی کاهش یافت. این امر منجر به بازبینی رویکردهای انتساب نصب و درآمدزایی از طریق تبلیغات شد.
در iOS 15 اپل الزامات ATT را سختتر نکرد، اما App Privacy Report را اضافه کرد — گزارشی که نشان میدهد برنامهها چند وقت یکبار به سنسورها و دادهها دسترسی پیدا میکنند. iOS 16 کنترل را گسترش داد: کاربر میتواند در هر لحظه تنظیمات ردیابی را از طریق تنظیمات → حریم خصوصی → ردیابی تغییر دهد.
مهم: اگر کاربر در دیالوگ ATT «از برنامه بخواه ردیابی نکند» را انتخاب کند، برنامه مقدار IDFA را دریافت نمیکند و به جای آن یک رشته صفر برگردانده میشود — 00000000-0000-0000-0000-000000000000. تلاش برای خواندن IDFA به روش دیگر یا روشهای دور زدن منجر به رد برنامه در App Store میشود.
از iOS 17 به بعد، اپل بررسیها را تقویت کرد: اگر برنامه بدون نمایش دیالوگ سیستمی ATT درخواست IDFA کند، در سطح سیستم عامل رد میشود، نه فقط یک شناسه خالی دریافت میکند. این امکان جمعآوری پسزمینه IDFA بدون اطلاع کاربر را منتفی میکند.
فرآیند درخواست ATT از سه مرحله تشکیل شده است: بررسی وضعیت، نمایش دیالوگ سیستمی و پردازش پاسخ. توسعهدهنده نمیتواند هیچ یک از مراحل را رد کند — سیستم عامل هر مرحله را کنترل میکند.
قبل از فراخوانی دیالوگ، برنامه باید وضعیت فعلی را از طریق ATTrackingManager بررسی کند. وضعیتهای ممکن: notDetermined (هنوز درخواست نشده)، restricted (توسط سیاستهای دستگاه ممنوع شده)، denied (کاربر رد کرده)، authorized (مجاز شده).
اگر وضعیت قبلاً مشخص شده باشد (authorized یا denied)، فراخوانی مجدد دیالوگ غیرممکن است — کاربر برای همیشه تصمیم گرفته است. تنها راه تغییر تصمیم از طریق تنظیمات سیستمی iOS است.
برای بررسی وضعیت از ویژگی ATTrackingManager.trackingAuthorizationStatus استفاده میشود. فراخوانی باید در رشته اصلی انجام شود زیرا دیالوگ سیستمی یک جزء UI است.
import AppTrackingTransparency
import AdSupport
func checkTrackingStatus() {
let status = ATTrackingManager.trackingAuthorizationStatus
switch status {
case .notDetermined:
requestTrackingPermission()
case .authorized:
readIDFA()
case .denied, .restricted:
useAlternativeTracking()
@unknown default:
break
}
}
برای نمایش دیالوگ، متد requestTrackingAuthorization با یک closure که نتیجه انتخاب کاربر را دریافت میکند فراخوانی میشود. مهم: دیالوگ فقط یک بار نمایش داده میشود. اگر توسعهدهنده سعی کند آن را دوباره فراخوانی کند، سیستم درخواست را نادیده میگیرد.
متن دیالوگ از دو بخش تشکیل شده است: عنوان سیستمی (قابل تغییر نیست) و پیام سفارشی که توسعهدهنده در Info.plist از طریق کلید NSUserTrackingUsageDescription مشخص میکند.
دیالوگ باید در بافت طبیعی ظاهر شود — نه بلافاصله پس از راهاندازی برنامه، بلکه در اولین تلاش برای استفاده از عملکرد مرتبط با ردیابی. اپل توصیه میکند دیالوگ را پس از آنکه کاربر ارزش ویژگی را درک کرد نمایش دهید.
func requestTrackingPermission() {
ATTrackingManager.requestTrackingAuthorization { status in
DispatchQueue.main.async {
switch status {
case .authorized:
let idfa = ASIdentifierManager.shared().advertisingIdentifier
print("IDFA: \(idfa)")
case .denied:
print("کاربر ردیابی را رد کرد")
default:
break
}
}
}
}
IDFA (Identifier for Advertisers) — شناسه تبلیغاتی منحصربهفرد دستگاه iOS است که برای تبلیغات هدفمند و انتساب نصب استفاده میشود. قبل از ATT توسعهدهندگان آن را از طریق ASIdentifierManager بدون محدودیت دریافت میکردند. پس از معرفی ATT، دسترسی به IDFA تا زمانی که کاربر رضایت صریح ندهد مسدود میشود.
IDFA یک رشته UUID است که برای هر دستگاه iOS منحصربهفرد است. شبکههای تبلیغاتی از IDFA برای: ردیابی نصب برنامهها (انتساب)، نمایش تبلیغات مرتبط بر اساس علایق کاربر، اندازهگیری اثربخشی کمپینهای تبلیغاتی و بازاریابی مجدد — بازگرداندن کاربرانی که اقدام هدف را کامل نکردهاند استفاده میکنند.
پس از رد ردیابی توسط کاربر، ASIdentifierManager مقدار 00000000-0000-0000-0000-000000000000 را برمیگرداند. برنامه همچنان میتواند IDFA را برای اهداف فنی (مثلاً ضدتقلب) بخواند، اما نمیتواند آن را به شبکههای تبلیغاتی منتقل کند.
به گفته Singular (2024)، سطح جهانی رضایت برای ATT 25-35% است، در اروپا (GDPR) شاخص بالاتر (40-50%) نسبت به ایالات متحده (15-25%) است. این امر پلتفرمهای تبلیغاتی را مجبور به توسعه روشهای جایگزین انتساب کرد.
SKAdNetwork فریمورکی از اپل برای انتساب نصب بدون افشای IDFA است. این فریمورک در سطح سیستم عامل کار میکند: شبکه تبلیغاتی یک postback امضا شده ارسال میکند، اپل آن را بررسی کرده و به توسعهدهنده منتقل میکند. انتساب بدون شناسایی کاربر خاص، فقط در سطح کمپین انجام میشود.
Probabilistic Attribution از سیگنالهای متعدد دستگاه — مدل، نسخه iOS، منطقه زمانی، روشنایی صفحه — برای تطبیق احتمالی نصبها با نمایشهای تبلیغاتی استفاده میکند. با این حال اپل این روش را در قوانین خود ممنوع کرده و استفاده از آن میتواند منجر به رد برنامه شود.
Google، Adjust و AppsFlyer راهحلهای هیبریدی خود را توسعه دادند که SKAdNetwork را با دادههای تجمیعشده خود ترکیب میکنند. به عنوان مثال، Google Ads Conversion Tracking از postbackهای SKAdNetwork و مدلهای یادگیری ماشین خود برای انتساب بدون IDFA استفاده میکند.
برای یکپارچهسازی ATT باید کلید NSUserTrackingUsageDescription را به Info.plist اضافه کرده و فریمورک AppTrackingTransparency را import کنید. در زیر مراحل Swift و Objective-C آورده شده است.
اولین قدم اضافه کردن کلید NSUserTrackingUsageDescription به Info.plist با متنی است که توضیح میدهد چرا برنامه به ردیابی نیاز دارد. این متن در دیالوگ سیستمی نمایش داده میشود. مثال: «IDFA شما برای نمایش تبلیغات شخصیسازیشده و ردیابی اثربخشی کمپینها استفاده میشود».
بدون این کلید، فراخوانی requestTrackingAuthorization منجر به **crash** برنامه میشود — اپل قبل از نمایش دیالوگ وجود NSUserTrackingUsageDescription را به صراحت بررسی میکند. متن باید مختصر، مشخص و متناسب با استفاده واقعی از دادهها باشد.
مهم: کلید به صورت دستی از طریق برگه Info در Xcode یا با ویرایش XML منبع Info.plist اضافه میشود. پس از اضافه کردن، پروژه را بازسازی کنید و بررسی کنید که کلید در باینری نهایی نمایش داده میشود.
<!-- Info.plist -->
<key>NSUserTrackingUsageDescription</key>
<string>This identifier is used to deliver
personalized ads and measure campaign performance.</string>
در یک پروژه واقعی، بهتر است درخواست ATT را قبل از اولین راهاندازی ماژول تبلیغاتی یا ردیاب فراخوانی کنید. توصیه میشود ابتدا در یک صفحه جداگانه (اعلان پیشمجوز) ارزش رضایت را برای کاربر توضیح دهید — این کار درصد رضایت را 20-30% افزایش میدهد.
اعلان پیشمجوز یک رابط کاربری اختصاصی است که مزیت فعالسازی ردیابی را نشان میدهد («به ما کمک کنید تبلیغات مرتبط نشان دهیم»). فقط پس از فشار دادن دکمه «ادامه» دیالوگ سیستمی ATT فراخوانی میشود. Adjust (2024) با استفاده از صفحه پیشمجوز افزایش 40% رضایت را ثبت کرد.
final class TrackingManager {
static let shared = TrackingManager()
func requestTrackingIfNeeded() {
guard ATTrackingManager.trackingAuthorizationStatus
== .notDetermined
else { return }
ATTrackingManager.requestTrackingAuthorization { _ in
NotificationCenter.default.post(
Notification(Name("trackingStatusChanged"))
)
}
}
}
توسعهدهندگان اغلب هنگام یکپارچهسازی ATT اشتباهات معمولی مرتکب میشوند که منجر به کاهش نرخ تبدیل رضایت یا رد برنامه توسط بازبینان App Store میشود. پنج مشکل رایج را بررسی میکنیم.
رایجترین اشتباه نمایش دیالوگ سیستمی ATT در اولین صفحه پس از بارگذاری برنامه است. کاربر هنوز ارزش برنامه را درک نکرده و با احتمال بالا دکمه «رد» را میزند. IronSource (2023) کاهش 32% رضایت را در درخواست صفحه اول نسبت به درخواست پس از جلسه سوم نشان داد.
توصیه: پس از آنکه کاربر اقدام هدف را انجام داد (محتوا را مشاهده کرد، فرآیند آشنایی را شروع کرد) یا پس از 3-5 جلسه استفاده از برنامه، ردیابی را درخواست کنید. این کار اعتماد و آگاهی از ارزش را افزایش میدهد.
نمایش دیالوگ سیستمی ATT بدون توضیح قبلی اشتباهی است که نرخ تبدیل را به 15-20% کاهش میدهد. کاربر درخواست غیرمنتظره را میبیند و به طور غریزی رد میکند. صفحه پیشمجوز با توضیح مزیت رضایت را به 35-45% افزایش میدهد.
متن پیشمجوز باید مشخص باشد: «اجازه دهید تبلیغات مرتبط نشان دهیم — این به ما کمک میکند رایگان بمانیم». از عبارات کلی خودداری کنید — آنها اعتماد را کاهش میدهند. GameAnalytics در سال 2023 نشان داد پیشمجوز با توضیح مزیت 28% بیشتر از صفحه خالی رضایت میگیرد.
اگر کاربر قبلاً ردیابی را رد کرده یا وضعیت restricted است (کنترل والدین، سیاستهای شرکتی)، برنامه نباید دوباره دیالوگ ATT را فراخوانی کند. فراخوانی مجدد کار نمیکند و به عنوان نقض حریم خصوصی تلقی میشود. در عوض به SKAdNetwork و تبلیغات زمینهای تغییر دهید.
در وضعیت restricted، برنامه نمیتواند تعیین کند که آیا گزینه «اجازه درخواستهای ردیابی» در تنظیمات فعال است یا خیر. در این حالت همیشه از انتساب بدون جایگزین از طریق SKAdNetwork استفاده کنید و صفحه پیشمجوز را نمایش ندهید.
خواندن IDFA از طریق ASIdentifierManager.shared().advertisingIdentifier بدون مجوز قبلی ATT یک رشته صفر برمیگرداند. برخی توسعهدهندگان سعی میکنند از روشهای قدیمی دسترسی به IDFA از طریق API خصوصی استفاده کنند — این کار به طور تضمینی منجر به رد برنامه در بازبینی میشود.
اپل از تحلیلگر استاتیک کد و یادگیری ماشین برای یافتن راههای دور زدن استفاده میکند. حتی اگر برنامه از بازبینی عبور کند، بهروزرسانیهای بعدی یا بررسیهای خودکار ممکن است تخلف را شناسایی کرده و منجر به مسدود شدن حساب توسعهدهنده شود.
متن بیش از حد طولانی، مبهم یا گمراهکننده در کلید NSUserTrackingUsageDescription دلیل رد برنامه توسط بازبینان است. اپل بررسی میکند که توضیحات با استفاده واقعی از دادهها مطابقت دارد. اگر در برنامه تبلیغاتی وجود ندارد اما «برای اهداف تبلیغاتی» ذکر شده باشد، بازبین بیلد را رد میکند.
فرمت توصیهشده: توضیح مشخص هدف استفاده از IDFA به طول 2-3 جمله. مثال برای برنامه بدون تبلیغات: «شناسه برای تحلیل و جلوگیری از تقلب استفاده میشود. دادهها به اشخاص ثالث منتقل نمیشوند و برای پروفایلسازی استفاده نمیشوند».
سوالات متداول
اگر برنامه از IDFA یا ردیابی بدون ATT استفاده کند، اپل آن را در فرآیند بازبینی رد میکند. حتی در صورت عدم ردیابی، توصیه میشود ATT برای شفافیت اضافه شود، در غیر این صورت خطر رد در بهروزرسانی بعدی افزایش مییابد.
بله، برنامه به طور کامل کار میکند، اما شبکههای تبلیغاتی IDFA را برای شخصیسازی و انتساب دریافت نمیکنند. همه عملکردهای برنامه به جز تبلیغات شخصیسازیشده در دسترس باقی میمانند.
بله، کاربر میتواند در هر لحظه از طریق تنظیمات → حریم خصوصی → ردیابی تصمیم خود را تغییر دهد. برنامه نمیتواند وضعیت را برنامهنویسی بازنشانی کند — فقط از طریق تنظیمات سیستم.
از صفحه پیشمجوز با توضیح مزیت استفاده کنید، ردیابی را نه در اولین راهاندازی بلکه پس از انجام اقدام هدف درخواست کنید. Meta (2024) افزایش 35% رضایت را با درخواست با تأخیر نشان داد.
برنامههای دسته «برای کودکان» طبق قوانین اپل نمیتوانند از IDFA و ATT برای ردیابی استفاده کنند. همچنین انتقال دادهها به اشخاص ثالث برای تحلیل یا تبلیغات برای آنها ممنوع است.
نتیجهگیری
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید