Локальные уведомления издают звук, но не отображаются (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.
}