iOS 10 push-уведомления – как работает функция willPresentNotification и didReceiveNotificationResponse?

В настоящее время у меня есть приложение, настроенное для получения push-уведомлений в ios 9, где он работает отлично, но с iOS 10 я их не получаю. Я просмотрел различные ответы на stackoverflow и наткнулся на это:

Push Notifications не принимается на iOS 10, но работает на iOS 9 и до

который, похоже, работает для плаката. Я не совсем уверен, какой код я должен добавить под разделами willPresentNotification и didReceiveNotificationResponse. Если у кого-нибудь есть примеры того, как работают эти секции, это будет оценено по достоинству. Это мой соответствующий код для обработки push-уведомлений:

import UserNotifications import Whisper @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { registerForPushNotifications(application) } //MARK: Push Notification Settings func registerForPushNotifications(application: UIApplication) { //check to see if phone is updated to iOS 10 if #available(iOS 10.0, *){ UNUserNotificationCenter.currentNotificationCenter().delegate = self UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert], completionHandler: {(granted, error) in if (granted) { UIApplication.sharedApplication().registerForRemoteNotifications() } else{ print("registering for push notifications unsuccessful") } }) } else{ //If user is not on iOS 10 use the old methods we've been using let notificationSettings = UIUserNotificationSettings( forTypes: [.Badge, .Sound, .Alert], categories: nil) application.registerUserNotificationSettings(notificationSettings) } } //Notification handling for iOS 10 @available(iOS 10.0, *) func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) { //Handle the notification - NOT SURE WHAT GOES HERE } @available(iOS 10.0, *) func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) { //Handle the notification -NOT SURE WHAT GOES HERE } //This is called if user selects to receive push notifications func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { // if notificationSettings.types != .None { application.registerForRemoteNotifications() // } } func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let tokenChars = UnsafePointer<CChar>(deviceToken.bytes) var tokenString = "" for i in 0..<deviceToken.length { tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]]) } //save device token to keychain self.deviceToken = tokenString userInfo.sharedInstance.savePushNotDeviceToken(tokenString) NSUserDefaultsManager.sharedManager.pushNotifications = true //register device token to api registerPushNotificationDevice(tokenString) print("Device Token:", tokenString) } func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { print("Failed to register:", error) //save push notifications state NSUserDefaultsManager.sharedManager.pushNotifications = false } //In- App push notifications func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { if application.applicationState == .Active { let navigationController = self.window!.rootViewController as! UINavigationController let alert = [String: String]() let title = "" let body = "" // Default printout of userInfo print("All of userInfo:\n\( userInfo)\n") if let aps = userInfo["aps"] as? NSDictionary { if let alert = aps["alert"] as? NSDictionary { if let title = alert["title"] as? NSString { if let body = alert["body"] as? NSString { let announcement = Announcement(title: title as String, subtitle: body as String, image: UIImage(named: "Image")) show(shout: announcement, to: navigationController) } } } } } } } 

Для удаленного и локального уведомления в iOS 10 у нас есть UserNotifications.framework . Для обработки уведомления есть два метода делегата UNUserNotificationCenterDelegate, доступных в UserNotifications.framework. Вам нужно сделать тот же код, который вы делаете в методе didReceiveRemoteNotification, чтобы получить userInfo.

Эти два метода доступны для обработки userInfo в соответствии с требованиями вашего приложения.

 //UNUserNotificationCenterDelegate delegate methods to get userInfo @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (_ options: UNNotificationPresentationOptions) -> Void) { //Called when a notification is delivered to a foreground app. let userInfo = notification.request.content.userInfo as? NSDictionary print("\(userInfo)") } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { // Called to let your app know which action was selected by the user for a given notification. let userInfo = response.notification.request.content.userInfo as? NSDictionary print("\(userInfo)") } 
  • Быстрая ошибка: префикс / постфикс '=' зарезервирован
  • Сбои, чтобы определить, находится ли CGPoint внутри квадрата (алмазная форма)
  • swift - Как проверить CoreData существует
  • Кодирование URL Objective-C и Swift
  • Как открыть контроллер просмотра страниц в моем приложении iOS только при первом запуске приложения?
  • Словарь Swift: фильтр
  • Вызов метода экземпляра во время инициализации в Swift
  • Массив поиска словарей для значения в Swift
  • Swift: CoreData и общий NSOrderedSet
  • Swift: использование оператора switch в touchsBegan
  • Как обмениваться изображениями в instagram? Swift
  • Interesting Posts

    Получение данных сервера для Apple Watch

    Как я могу представить представление выбора так же, как клавиатура?

    Firestore – Ошибка прослушивателя снимков iOS. Указанная транзакция истекла или больше не действительна

    Сертификат для этого сервера является неверной ошибкой, когда startForUploadPhoto использует facebook sdk

    Показать UIImageView с размером, меньшим его собственного размера

    Где найти четкое объяснение относительно быстрого предупреждения (UIAlertController)?

    Получение предупреждения об анализе зависимостей для DEFINES_Modules

    Панель поиска сбрасывается на одну строку каждый раз, когда нажата кнопка отмены

    Разработка iOS-понга, таймер не остановится

    GlView вызывает ошибку OpenGL

    Управление памятью Swift 2.2

    Как добавить приложение в «Открыть или поделиться с» в изображении «Фотографии»?

    Проблема блокировки всплывающих окон IOS UIWebView

    Локализованная строка в Foundation.framework не найдена

    RestKit: Как выполнить несколько запросов и получить ответ после их завершения?

    Давайте будем гением компьютера.