iOS 15下SwiftUI项目如何在应用启动时弹出ATT授权弹窗
iOS 15+ SwiftUI项目启动弹出ATT授权弹窗解决方案
问题背景
在iOS 14系统中,SwiftUI项目可通过如下代码在应用启动时弹出ATT(App Tracking Transparency)授权弹窗:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. if #available(iOS 14, *) { ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in // loadAd() }) } else { // loadAd() } return true }
但该方案在iOS 15.0及以上版本无法生效,苹果官方要求如下:
仅当应用状态为UIApplicationStateActive时调用该API才会弹出授权弹窗,通过应用扩展调用该API不会触发弹窗。
实现方案
监听应用进入活跃状态的系统通知,待应用完全启动进入活跃状态后再调用ATT授权接口即可。SwiftUI项目可以直接在根视图的onReceive修饰符中监听UIApplication.didBecomeActiveNotification通知触发授权请求,对应实现代码如下:
struct HomeView: View { var body: some View { VStack { Text("Hello!") }.onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in }) } } }
内容的提问来源于stack exchange,提问作者donchan
相关产品推荐
相关产品推荐

