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) } } } } } } } 

One Solution collect form web for “iOS 10 push-уведомления – как работает функция willPresentNotification и didReceiveNotificationResponse?”

Для удаленного и локального уведомления в 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)") } 
  • Xcode 7: Shadow НЕ показывает вокруг UIView в интерфейсе Builder
  • Кодировка Base64 с Swift 3
  • Не показывать уведомление, когда на переднем плане
  • iOS быстрые параметры для таблиц электронных таблиц
  • Убедитесь, что если текстовое поле из коллекции UITextFields пустое
  • Как иметь свойство List <String>?
  • Кнопка просмотра центра в пользовательское местоположение с помощью MapKit
  • AWS ios SDK - почтовый запрос для работы с эластичным транскодером
  • Как выровнять логотип в строке
  • Преобразование NSDate в строку в iOS Swift
  • Swift: В чем разница между «Currying» и функцией, возвращающей функцию?
  • Interesting Posts

    ищет ресурс для изучения «Внешней инфраструктуры» (iOS)

    iOS Touch ID не требуется кнопка с паролем

    MKAnnotationView всегда показывает infoButton вместо detailDisclosure btn

    Добавление изображений в Assets.xcassets не будет отображаться на LaunchScreen.storyboard

    Заменить «release» или «dealloc»

    (howto) Получите лицо от входа в переднюю камеру как UIImage

    Как включить несколько представлений коллекции в один контроллер представления?

    Обфускация кода Swift перед отправкой в ​​Apple App Store

    Открыть локальный файл PDF в iBooks

    Получить ярлык номера телефона iPhone из адресной книги

    forceTouchCapability возвращает ноль

    Должны ли IBOutlets быть ivars или свойства?

    Невозможно обрабатывать push-уведомления, когда приложение работает с фоном

    Событие календаря добавляет несколько раз при создании события в IOS

    Как отображать изображение в UIImageView с помощью URL и NSString в ios?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.