11

由于 ATT 请求未出现,Apple 审阅者刚刚拒绝了我的应用:“在 iOS 15.0.1 上审阅时,我们无法找到 App Tracking Transparency 权限请求。”

我的代码如下所示:

if #available(iOS 14, *) {
  ATTrackingManager.requestTrackingAuthorization { (status) in
    //print("IDFA STATUS: \(status.rawValue)")
    FBAdSettings.setAdvertiserTrackingEnabled(true)
  }
}

我在 AppDelegatedidFinishLaunchingWithOptionsviewDidLoad. ATT 权限请求出现在 iOS 14 上,但不在 iOS 15 上。

4

5 回答 5

12

一位Apple 人员建议您通过applicationDidBecomeActive(_:). AppDelegate这就是我解决iOS问题的方式。

import UIKit
import AppTrackingTransparency

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {
    func applicationDidBecomeActive(_ application: UIApplication) {
        if #available(iOS 15.0, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                
            })
        }
    }
}
于 2021-10-02T21:43:46.533 回答
12

该死的我修好了:(这都是关于iOS警报系统的。在询问通知请求后,我正在请求应用程序跟踪透明度。一旦通知请求警报关闭,就需要出现ATT警报。它在iOS上运行良好14,但在 iOS 15 上要在另一个之后显示警报,需要彼此之间有一个延迟时间。

编辑:这是我的代码,分别显示两个警报:

 func setNotification(){
    //Ask for notification permission
    let n = NotificationHandler()
    n.askNotificationPermission {
        //n.scheduleAllNotifications()
        
        //IMPORTANT: wait for 1 second to display another alert
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            if #available(iOS 14, *) {
              ATTrackingManager.requestTrackingAuthorization { (status) in
                //print("IDFA STATUS: \(status.rawValue)")
                //FBAdSettings.setAdvertiserTrackingEnabled(true)
              }
            }
        }
    }
}

为了您的方便,这里是我的 NotificaitionHandler 类:

import UserNotifications

class NotificationHandler{
//Permission function
func askNotificationPermission(completion: @escaping ()->Void){
    
    //Permission to send notifications
    let center = UNUserNotificationCenter.current()
    // Request permission to display alerts and play sounds.
    center.requestAuthorization(options: [.alert, .badge, .sound])
    { (granted, error) in
        // Enable or disable features based on authorization.
        completion()
    }
}
于 2021-10-03T10:32:58.227 回答
0

If you are using flutter use this package fixed for me. https://pub.dev/packages/app_tracking_transparency

于 2022-02-12T08:07:16.790 回答
0

我已更改为从

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
}

@available(iOS 13.0, *)
func sceneDidBecomeActive(_ scene: UIScene) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        self.requestPermission()
    }
}

func requestPermission() {
    if #available(iOS 15.0, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                switch status {
                case .authorized:
                    // Tracking authorization dialog was shown
                    // and we are authorized
                    print("Authorized")
                case .denied:
                    // Tracking authorization dialog was
                    // shown and permission is denied
                    print("Denied")
                case .notDetermined:
                    // Tracking authorization dialog has not been shown
                    print("Not Determined")
                case .restricted:
                    print("Restricted ")
                @unknown default:
                   
                }
            })
        }
    }
}
于 2021-11-29T06:58:54.473 回答
0

我已更改为从 AppDelegate 的 applicationDidBecomeActive 方法调用请求并且它有效!

弹出窗口在 iOS15 上的第一个应用程序启动时呈现。

于 2021-10-10T02:04:40.707 回答