You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:20:40