0

Когда я впервые запускаю свое приложение, симулятор может отображать уведомления, пока приложение находится на переднем плане ,`willPresent notification` не вызывается и локальные уведомления не отображаются, когда приложение находится на переднем плане в iOS 10

Когда я повторно запустить приложение didReceive notification: (т.е. способа уведомления от прошивки 9) вызывается вместо willPresent notification (т.е. способа уведомления от прошивки 10) и никаких уведомлений не отображаются в то время как приложение находится на переднем плане. Тем не менее, уведомление отображается, если приложение находится в фоновом режиме.

Ни тот question, ни этот question не смогли решить эту проблему.

я получить разрешение для уведомлений с помощью этого кода:

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]? = [:]) -> Bool { 
       if #available(iOS 10.0, *) { 
        let center = UNUserNotificationCenter.current() 
        center.requestAuthorization(options: [.alert, .sound, .sound]) { (granted, error) in    
        UNUserNotificationCenter.current().delegate = self     
        }      
       } 
       return true 
      } 

И я реализовал метод уведомления willPresent:

@available(iOS 10.0, *) 
      func userNotificationCenter(_ center: UNUserNotificationCenter, 
             willPresent notification: UNNotification, 
             withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)      completionHandler(UNNotificationPresentationOptions.alert) 
      } 

Вот как я создаю уведомление:

let content = UNMutableNotificationContent() 
     content.title = title 
     content.subtitle = subtitle 
     content.body = message 
     content.categoryIdentifier = identifier      

     let trigger = UNTimeIntervalNotificationTrigger(
      timeInterval: 10.0, 
      repeats: false) 

     let request = UNNotificationRequest(
      identifier: "identifier", 
      content: content, 
      trigger: trigger 
     ) 

     UNUserNotificationCenter.current().add(
      request, withCompletionHandler: nil) 

Задача в двух словах: Как я могу убедиться, что приложение может отображать уведомление, когда приложение находится на переднем плане после первого запуска приложения?

Заранее спасибо.

+0

Это потому, что идентификатор одинаковый для всех уведомлений. убедитесь, что вы добавляете разные идентификаторы для разных уведомлений. Кроме того, почему вы запрашиваете '.sound' два раза в разрешении? – bhakti123

ответ

1

Попробуйте установить делегат за пределами блока завершения requestAuthorization. Вероятно, это происходит позже, чем вы хотите.

Я добавил образец проекта здесь: https://github.com/jerbeers/DemoLocalNotification

Если вы построить и запустить, нажмите на кнопку, вы увидите местное уведомление через 3 секунды. Если вы остановитесь, создайте и запустите снова, я вижу локальное уведомление даже во время работы приложения.

+0

Спасибо за ваш ответ. Я попытался установить делегат как до, так и после блока завершения requestAuthorization, и это не решило проблему. Можете ли вы предложить любые другие решения? –

+0

Скажите мне, что вы делаете. Когда вы говорите «первый запуск» и «перезапуск», что конкретно вы делаете? – Jerry

+0

В первый раз я имею в виду; в первый раз, когда я «устанавливаю» приложение, а «relaunch» я имею в виду; когда я перезагружаю приложение через Xcode в симуляторе после его установки. –

Смежные вопросы