Локальные уведомления издают звук, но не отображаются (Swift)

Я пытаюсь создать локальное уведомление для моего приложения с помощью Apple UNUserNotificationCenter.

Вот мой код:

let center = UNUserNotificationCenter.current()

let content = UNMutableNotificationContent()
content.title = task.name
content.body = task.notes
content.sound = UNNotificationSound.default()

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

let request = UNNotificationRequest(identifier: task.UUID, content: content, trigger: trigger)

center.add(request) { (error:Error?) in
   if let theError = error {
      print("Notification scheduling error: \(error)")
   }else{
      print("Notification was scheduled successfully")
   }
}

Запрос доступа:

let center = UNUserNotificationCenter.current()

//request notification access
let options: UNAuthorizationOptions = [.alert, .sound]
center.requestAuthorization(options: options) { (granted, error) in
   if !granted {
      print("Notification access was denied")
   }
}

Через 5 секунд приложение издает звук по умолчанию, но не показывает содержимое оповещения. Я пытаюсь как с приложением на переднем плане, так и в фоновом режиме.

3 ответа

У меня такая же проблема.

Если ваше тело содержимого пустое, т. Е. (Content.body == ""), вы не получите уведомление, даже если у вас есть заголовок.

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

Добавьте этот Protocoal UNUserNotificationCenterDelegate, и добавьте этого делегата в свой контроллер. и не забудьте установить делегат.

UNUserNotificationCenter.current().delegate = self

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        print("Notification being triggered")
        //You can either present alert ,sound or increase badge while the app is in foreground too with ios 10
        //to distinguish between notifications
        if notification.request.identifier == "yourrequestid"{
            completionHandler( [.alert,.sound,.badge])
        }
    }

Добавьте этот код в didFinishLaunchingWithOption в файле AppDelegate.swift

let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) 
{ (granted, error) in
// Enable or disable features based on authorization.
}
Другие вопросы по тегам