Сервисное расширение Notificaton не работает
Уведомление не отображается, когда я отправляю изменяемое содержимое:1 с полезной нагрузкой push, и оно не достигает точки останова внутри расширения службы уведомлений, хотя без push-уведомления с изменяемым содержимым также работает расширение содержимого уведомления. Я не изменял код внутри расширения службы уведомлений по умолчанию, сгенерированный xcode. Я что-то упускаю при создании расширения службы уведомлений или это может быть связано с настройкой устройства. Я тестировал на том же устройстве несколько дней назад, и расширение службы уведомлений работало нормально.
Ниже мой код для расширения услуг
import UserNotifications
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
изменить 1: ниже моя полезная нагрузка
{
"aps":{
"sound":"default",
"mutable-content": 1,
"category": "myCategory",
"alert":{
"body":"this is a custom push",
"subtitle":"subtitle of the push",
"title":"Push Test"
}
}
}
edit 1: проблема, кажется, на том конкретном устройстве, работающем на 10.2.1, я проверил с другим устройством, работающим на 10.2, оно запускает расширение службы уведомлений.
7 ответов
Наконец я смог решить проблему. Я не уверен, что вызвало проблему, но после некоторых экспериментов я понял, что не только мое служебное расширение, но и все служебное расширение всех других установленных приложений не работало, и при отправке полезной нагрузки с "mutable-content: 1" уведомление не отображалось. После перезагрузки устройства оно заработало нормально, я использовал iPhone 6s.
Цель развертывания вашего NotificationServiceExtension также может быть причиной.
В моем случае я тестировал устройство под управлением iOS 12.4, в то время как целевая версия моего NotificationServiceExtension была 14.1. Я просто изменил свою целевую версию NotificationServiceExtension на 12.4. Она сработала.
В моем случае, когда я занимался отладкой, расширение службы уведомлений не запускалось системой, когда она получала уведомление с полезной нагрузкой изменяемого содержимого. Я много пробовал, а потом понял, что в сценарии запуска
В моем случае это оказалось моим расширением, использующим слишком много памяти.
Console.app
только показывал, что Springboard убивает приложение с ошибкой вроде:
CMSessionMgr- CMSessionMgrHandleApplicationStateChange: CMSession: отправка команды остановки на _ с pid '_', поскольку клиенту не разрешено воспроизведение в фоновом режиме, И он не продолжает видео AirPlaying, когда устройство блокируется
Я думал, что что-то не так с правами или чем-то в этом роде, но как только я его отладил, я увидел, что iOS убивает процесс из-за того, что он занимает слишком много памяти. Как только я исправил эту ошибку, расширение оставалось активным, пока я не вызвал обратный вызов.
Возможно, это не имеет отношения к общей проблеме, если она существует, но я потратил целый день, пытаясь понять, почемуAppMetrica
Push SDK-кампании не приходятTestFlight
но успешно выполняется при запуске из Xcode. Для меня это была «продвигающая среда», настроенная не на «производство», а на «разработку»:
вfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
пришлось изменить его на:
let pushEnvironment = YMPYandexMetricaPushEnvironment.production
YMPYandexMetricaPush.setDeviceTokenFrom(deviceToken, pushEnvironment: pushEnvironment)
Попробуйте устройство в режиме реального времени (iPhone/IPad). это не будет работать для симулятора.