ATTrackingManager перестал работать в iOS 15

#swift #ios15

Вопрос:

ATTrackingManager.Отслеживание запросов Авторизация перестала работать в ios 15. Заявка отклонена компанией Apple.

Комментарии:

1.Да, Эта проблема решена. Пожалуйста, перейдите по двум ссылкам ниже. developer.apple.com/forums/thread/690607 developer.apple.com/forums/thread/690762

Ответ №1:

Согласно обсуждению на форуме разработчиков Apple, вам необходимо добавить задержку примерно на одну секунду при вызове requestTrackingAuthorization. https://developer.apple.com/forums/thread/690607

Пример:

 DispatchQueue.main.asyncAfter(deadline: .now()   1.0, execute: {
          ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
        // Tracking authorization completed. Start loading ads here.
        // loadAd()
      })
})
 

P.S.
Также, если у вас есть разрешение на запрос push-уведомления, сначала вам нужно запросить push-уведомление, а затем запросить авторизацию отслеживания с задержкой =>

     private func requestPushNotificationPermission() {
    let center = UNUserNotificationCenter.current()
    UNUserNotificationCenter.current().delegate = self
    center.requestAuthorization(options: [.sound, .alert, .badge], completionHandler: { (granted, error) in
        if #available(iOS 14.0, *) {
            DispatchQueue.main.asyncAfter(deadline: .now()   1.0, execute: {
                ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                    // Tracking authorization completed. Start loading ads here.
                    // loadAd()
                })
            })
        }})
    UIApplication.shared.registerForRemoteNotifications()
}
 

Ответ №2:

Проблема решена, просто позвоните по applicationDidBecomeActive телефону : https://developer.apple.com/forums/thread/690762

Комментарии:

1. Да, Решено. Спасибо за обновление. Это также может быть решено с помощью этого решения developer.apple.com/forums/thread/690607

Ответ №3:

Убедитесь, что настройки вашего iPhone -> Конфиденциальность ->> Отслеживание включено. В противном случае он не будет запрашивать авторизацию запроса.

Ответ №4:

Следуйте инструкциям apple doc:

Вызовы API запрашиваются только в том случае, если состояние приложения UIApplicationStateActive .

Итак, нам нужно обратиться ATTrackingManager.requestTrackingAuthorization к applicationDidBecomeActive оф AppDelegate .

Но если вы используете сцены (см. Сцены), UIKit не будет вызывать этот метод. Используйте sceneDidBecomeActive(_:) вместо этого для перезапуска любых задач или обновления пользовательского интерфейса вашего приложения. UIKit публикует a didBecomeActiveNotification независимо от того, использует ли ваше приложение сцены.

Итак, мой подход заключается в том, чтобы зарегистрироваться addObserver на didFinishLaunchingWithOptions таких:

NotificationCenter.default.addObserver(self, selector: #selector(handleRequestEvent), name: UIApplication.didBecomeActiveNotification, object: nil)

на handleRequestEvent :

requestPermission() // func call ATTrackingManager.requestTrackingAuthorization NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)

Надеюсь, это поможет. Это работа для меня.