В iOS работает следующий код:
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, _ in
guard granted else { return }
DispatchQueue.main.async {
application.registerForRemoteNotifications()
}
}
Для macOS я изменил этот код на:
UNUserNotificationCenter.current().requestAuthorization(options: options) { granted, _ in
guard granted else { return }
DispatchQueue.main.async {
NSApplication.shared.registerForRemoteNotifications()
}
}
Оказывается, строка NSApplication.shared.registerForRemoteNotifications()
неверна. В macOS вы должны передать те же опции, которые вы указали в этом вызове.
Изменение этой строки на следующее сработало.
NSApplication.shared.registerForRemoteNotifications(matching: [.alert, .sound, .badge])
Что я нахожу странным, так это то, что в документации Apple говорится, что этот метод устарел, и вместо этого мы должны использовать registerForRemoteNotifications()
. Это заставляет меня думать, что есть какой-то тип ошибки с registerForRemoteNotifications()
, когда уведомления не отображаются правильно.
Еще одна вещь, которую стоит упомянуть. Потребовалось немного времени (пара минут) и несколько отправленных уведомлений, чтобы они действительно появились после внесения этого изменения. Не уверен, что это просто из-за медленного интернет-соединения или чего-то еще. Но теперь они появляются очень быстро после отправки.
Редактировать
Apple сообщила мне, что это исправлено в macOS 10.14.4. Я не смог обновить до лучших и протестировать его, хотя. Поэтому я не могу подтвердить на данный момент. Я обновлю это, когда у меня будет возможность протестировать MacOS 10.14.4.