Middle
Какво е разширение на услугата за известия?
sobes.tech AI
Отговор от AI
Разширението на службата за известия (Notification Service Extension) е малко изпълнимо допълнение, вградено във вашето iOS приложение. То позволява да се промени външният вид на съдържанието на отдалечено push известие преди неговото показване на потребителя.
Основни функции:
- Модифициране на съдържанието: Промяна на заглавието, подзаглавието, текста или добавяне на прикачени файлове (изображения, видеа) към известието.
- Декодиране на криптирани съдържания: Декодиране на криптирани данни, изпратени заедно с известието, преди да бъдат показани на потребителя.
- Богати известия: В съчетание с разширението за съдържание на известия (Notification Content Extension), позволява създаването на персонализирани интерфейси за показване на известия.
Цикъл на живот:
- При получаване на отдалечено известие с ключ
mutable-content: 1, системата инициира стартирането на разширението за известия. - Извиква се методът
didReceive(_:withContentHandler:), който обработва и модифицира известието. - Модифицираното съдържание се предава на обработчика
contentHandler. - Системата показва модифицираното известие.
Ограничения:
- Краткотрайно изпълнение (обикновено около 30 секунди).
- Ограничен достъп до системните ресурси.
- Не може да изпълнява дълги фонови задачи.
Пример за основна реализация:
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 {
// Модифицирайте съдържанието на известието тук...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Без заглавие") [променено]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Извиква се точно преди разширението да бъде прекратено от системата.
// Използвайте това като възможност да доставите "най-добрия" си опит за модифицирано съдържание,
// иначе оригиналното натоварване на push ще бъде доставено.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}