Как запустить приложение с UNNotificationServiceExtension на предварительной iOS 10?
В моем приложении реализовано новое расширенное расширение NotificationService для iOS 10.
На iOS 10 все работает, как и ожидалось, но я также хочу поддерживать устройства до iOS 10 - конечно, не богатый push, а просто обычный push. При понижении цели развертывания в XCode, например, до 8.0 или 9.0 и попытке запуска на более старом симуляторе или устройстве, я получаю следующие ошибки:
Simulator: The operation couldn’t be completed. (LaunchServicesError error 0.)
Device: This app contains an app extension that specifies an extension point identifier that is not supported on this version of iOS for the value of the NSExtensionPointIdentifier key in its Info.plist.
Я не смог найти ничего официального от Apple, заявив, что ваше приложение будет работать на iOS 10+ только после того, как вы добавите расширение службы - кто-то может это подтвердить?
3 ответа
Бхавук Джейн говорит о том, как поддерживать уведомления на старых ios, но не устраняет ошибку LaunchServicesError. Чтобы решить эту проблему, вам нужно перейти к цели расширения -> Общие -> Установить цель развертывания (10.0 для этого случая) в разделе Информация о развертывании.
Сначала инициализируйте службы уведомлений:
func initializeNotificationServices() -> Void {
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
if granted {
UIApplication.shared.registerForRemoteNotifications()
}
}
}else {
let settings = UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
}
}
При успешной регистрации для удаленных уведомлений это будет вызвано для всех устройств:
optional public func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
Только для iOS 10, для обработки удаленных уведомлений:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
notificationReceived(userInfo: userInfo, application: nil)
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
}
Для устройств ниже iOS 10:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
}
Изменить статус фреймворков на необязательный. когда это требуется, некоторые фреймворки не работают на ios 9. введите описание изображения здесь