Apple追踪请求在Beta测试中不显示,应用遭App Store拒审求助
问题描述
我已在应用中集成Apple隐私追踪请求,真机测试时该请求会在引导页(OnBoarding)首屏弹出;但归档提交至Beta测试(TestFlight)后,请求却无法显示。原以为是TestFlight测试首屏的Bug,却因未配置Apple追踪请求遭App Store多次拒审,恳请协助排查问题。
实现代码
import Foundation import SwiftUI import GoogleMobileAds import AppTrackingTransparency import AdSupport @main struct ERappApp: App { @StateObject private var store = PatientStore() @StateObject private var profstore = ProfileStore() @AppStorage("_shouldShowOnboarding") var shouldShowOnboarding: Bool = true var body: some Scene { WindowGroup { TabView { [...] } .onAppear { if #available(iOS 14, *) { // Display permission to track ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in switch status { case .notDetermined: print("Unknown consent") case .restricted: print("Device has an MDM solution applied") case .denied: print("Denied consent") case .authorized: print("Granted consent") default: print("Unknown") } }) } PatientStore.load { result in switch result { case .failure(let error): fatalError(error.localizedDescription) case .success(let cards): store.cards = cards } } ProfileStore.load { result in switch result { case .failure(let error): fatalError(error.localizedDescription) case .success(let prof): profstore.prof = prof } } } .fullScreenCover(isPresented: $shouldShowOnboarding,content: { OnBoardingView(shouldShowOnboarding: $shouldShowOnboarding) }) } } }
排查与解决方案
1. 调整追踪请求触发时机
当前代码将追踪请求放在TabView的onAppear回调中,但此时引导页(fullScreenCover)已经优先弹出,TabView的onAppear可能在引导页之后才执行,导致授权框无法在引导页首屏显示。
修复方案:将追踪请求移至OnBoardingView的onAppear中,确保引导页首屏加载完成后立即触发授权请求:
// 在OnBoardingView的实现中添加 struct OnBoardingView: View { @Binding var shouldShowOnboarding: Bool var body: some View { // 引导页内容 [...] .onAppear { if #available(iOS 14, *) { DispatchQueue.main.async { ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in // 状态处理逻辑 }) } } } } }
2. 补充Info.plist必填配置
Apple要求必须在Info.plist中添加NSUserTrackingUsageDescription键,填写明确的追踪用途说明(比如"我们需要您的授权以个性化广告内容"),否则授权框不会弹出,且会直接导致App Store拒审。
配置方式:
- 打开
Info.plist,添加新条目,键选择Privacy - Tracking Usage Description,值填入清晰的用途说明。
3. 重置TestFlight测试设备的隐私状态
TestFlight版本会保留设备上的隐私授权状态,若之前已经授权/拒绝过,授权框不会再次弹出。
测试前准备:
进入iPhone「设置」→「通用」→「传输或还原iPhone」→「还原」→「还原位置与隐私」,重置后重新安装TestFlight版本即可触发授权请求。
4. 确保追踪请求在主线程执行
当前代码中onAppear同时执行多个异步任务,可能导致追踪请求被延迟。需确保ATTrackingManager.requestTrackingAuthorization在主线程调用:
DispatchQueue.main.async { if #available(iOS 14, *) { ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in // 状态处理 }) } }
内容的提问来源于stack exchange,提问作者torrinha
相关产品推荐
相关产品推荐

