UNNotificationContentExtension не обновляет нижний колонтитул содержимого по умолчанию при получении нового уведомления
У меня есть реализация расширения содержимого уведомлений, которое использует содержимое уведомлений по умолчанию (две текстовые строки внизу), предоставляемые iOS при открытии:
Проблема заключается в том, что когда приходит новое уведомление, в то время как UNNotificationContentExtension
заголовок и строки тела нижнего колонтитула не обновляются. Я проверил этот метод didReceive()
снова корректно вызывается и что UNNotification
имеет правильную обновленную информацию (параметры notification.request.content.body
а также notification.request.content.title
). Тем не менее, ОС, похоже, просто игнорирует их, оставляя текст внизу неизменным, даже если мы сможем обновить сам контент без проблем.
Можно ли принудительно обновить содержимое по умолчанию? Кажется, что нет никакого параметра и / или метода, который мы могли бы использовать для этого...
Заранее спасибо за любой ответ.
РЕДАКТИРОВАТЬ: Я должен также добавить, что уведомления генерируются локально (APN еще не активен). Код выглядит примерно так:
UNMutableNotificationContent *notificationContent = [UNMutableNotificationContent new];
notificationContent.categoryIdentifier = @"my.notification.category";
notificationContent.title = @"My notification title";
notificationContent.body = @"My notification body";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:notificationUUID
content:notificationContent
trigger:notificationTrigger];
UNUserNotificationCenter *notificationCenter = [UNUserNotificationCenter currentNotificationCenter];
[notificationCenter addNotificationRequest:request withCompletionHandler:nil];
1 ответ
Вам необходимо реализовать расширение UNNotificationServiceExtension так же, как и UNNotificationContentExtension. Затем в методе didReceive вы можете получить доступ к вашей полезной нагрузке и обновить ее.
didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent)
будет вызываться до метода расширения содержимого уведомления.
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)
}
}
}