Middle
Ce este o extensie a serviciului de notificări?
sobes.tech AI
Răspuns de la AI
Extensia Serviciului de Notificări (Notification Service Extension) este o mică completare executabilă integrată în aplicația dvs. iOS. Aceasta permite modificarea aspectului conținutului unei notificări push remote înainte de afișarea acesteia utilizatorului.
Funcții principale:
- Modificarea conținutului: Schimbarea titlului, subtitlului, textului sau adăugarea de atașamente (imagini, videoclipuri) la notificare.
- Decriptarea conținutului criptat: Decriptarea datelor criptate trimise împreună cu notificarea înainte de a fi afișate utilizatorului.
- Notificări bogate: În combinație cu extensia de conținut a notificărilor (Notification Content Extension), permite crearea de interfețe personalizate pentru afișarea notificărilor.
Ciclul de viață:
- La primirea unei notificări remote cu cheia
mutable-content: 1, sistemul inițiază pornirea extensiei serviciului de notificări. - Se implementează metoda
didReceive(_:withContentHandler:), în care se procesează și modifică notificarea. - Conținutul modificat este transmis către handler-ul de finalizare
contentHandler. - Sistemul afișează notificarea modificată.
Limitări:
- Executare de scurtă durată (de obicei în jur de 30 de secunde).
- Acces limitat la resursele sistemului.
- Nu poate executa sarcini lungi în fundal.
Exemplu de implementare de bază:
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 {
// Modificați conținutul notificării aici...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Fără titlu") [modificat]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Apelat chiar înainte ca extensia să fie terminată de sistem.
// Folosiți această ocazie pentru a livra "cea mai bună încercare" a conținutului modificat,
// altfel, va fi livrată încărcătura utilă push originală.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}