UNUserNotificationCenter. Уведомления не разрешены для этого приложения
Я нуб в разработке приложений на OSX. Я хочу создать приложение с расширением Share. После загрузки контента я хочу показать уведомление, но получаю сообщение об ошибке "Уведомления не разрешены для этого приложения". Я не понимаю почемуrequestAuthorization
не отображать диалоговые окна с разрешением, и как я могу разрешить приложению отправлять уведомления.
Это мой код:
import Cocoa
import UserNotifications
class ShareViewController: NSViewController {
override func loadView() {
self.view = NSView()
// Insert code here to customize the view
let item = self.extensionContext!.inputItems[0] as! NSExtensionItem
NSLog("Attachment = %@", item.attachments! as NSArray)
showNotification()
let outputItem = NSExtensionItem()
let outputItems = [outputItem]
self.extensionContext!.completeRequest(returningItems: outputItems, completionHandler: nil)
}
func showNotification() -> Void {
let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.requestAuthorization(options: [.alert, .badge]) {
(granted, error) in
if granted {
print("Yay!")
} else {
print("D'oh") // Print this, not authorized
}
}
let content = UNMutableNotificationContent()
content.title = "Hello"
content.body = "This is example"
content.sound = UNNotificationSound.default
content.badge = 1
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
notificationCenter.add(request) { (error : Error?) in
if let theError = error {
print(theError) // Print Domain=UNErrorDomain Code=1 "Notifications are not allowed for this application"
}
}
}
}
2 ответа
Apple не разрешает отправлять уведомления из расширений Share.
Я не вижу нигде в документации, где говорится, что нельзя запланировать новые локальные уведомления из расширения. Тем не менее, я вижу заявку в службу поддержки Apple, в которой кому-то приходилось решать эту проблему, как и мне.
По сути, этот сбой - состояние гонки. Ключ в том, чтобы не вызывать contentHandler этого метода расширения:
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
пока после завершения обработчика
notificationCenter.add(request: UNNotificationRequest>, withCompletionHandler: ((Error?) -> Void)
называется. У меня это сработало. Есть смысл?