#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 публикует adidBecomeActiveNotification
независимо от того, использует ли ваше приложение сцены.
Итак, мой подход заключается в том, чтобы зарегистрироваться 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)
Надеюсь, это поможет. Это работа для меня.