在iOS 14中,当应用程序在SwiftUI中启动时,它可以显示ATT(应用程序跟踪透明度)对话框,如下所示。
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中,它不工作。苹果文档描述如下。
仅当应用程序状态为以下情况时,才会提示调用API:UIApplicationStateActive。通过应用扩展调用API时不提示。https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorization
如何显示ATT对话框时,应用程序在iOS 15启动?
2021/9/28更新我是这样解决的。
struct HomeView: View {
var body: some View {
VStack {
Text("Hello!")
}.onReceive(NotificationCenter.default.publisher(for: UIApplication.didBecomeActiveNotification)) { _ in
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in })
}
}
}
5条答案
按热度按时间0s7z1bwu1#
无需在didFinishLaunchingWithOptions中调用应用跟踪透明度权限,而是在applicationDidBecomeActive中调用,这样就可以解决问题
在应用委托中
在信息列表中
g6baxovj2#
如@donchan所述,使用以下代码:
jhdbpxl93#
对于iOS 15,我遇到了同样的问题,我通过延迟代码执行一秒钟来修复它们。
sg3maiej4#
一个非常重要的补充,所有以上的答案:ATT对话框必须被调用一次!2例如,在广告管理器中,如果你在请求广告之前重复调用ATT对话框(就像以前的操作系统版本一样),那么对话框将不会显示!3因此,ATT对话框请求必须直接插入视图中,并且在无条件触发时延迟至少1秒。
pcww981p5#
如果您正在编写SwiftUI应用程序,则可以在开始屏幕上触发它。
不要忘记在. plist中添加必要的内容。
因此,它将在模拟器或真实的设备上运行。