Middle
Šta je proširenje usluge obaveštenja?
sobes.tech АИ
Одговор од АИ
Proširenje usluge obaveštenja (Notification Service Extension) je mali izvršni dodatak ugrađen u vašu iOS aplikaciju. Omogućava promenu izgleda sadržaja udaljenog push obaveštenja pre njegovog prikaza korisniku.
Glavne funkcije:
- Modifikacija sadržaja: Promena naslova, podnaslova, teksta ili dodavanje priloga (slika, video) u obaveštenje.
- Dešifrovanje šifrovanog sadržaja: Dekodiranje šifrovanih podataka poslatih zajedno sa obaveštenjem pre njihovog prikaza korisniku.
- Bogata obaveštenja: U kombinaciji sa proširenjem sadržaja obaveštenja (Notification Content Extension), omogućava kreiranje prilagođenih interfejsa za prikaz obaveštenja.
Životni ciklus:
- Prilikom primanja udaljenog obaveštenja sa ključem
mutable-content: 1, sistem inicira pokretanje proširenja usluge obaveštenja. - Poziva se metoda
didReceive(_:withContentHandler:), u kojoj se vrši obrada i modifikacija obaveštenja. - Izmenjeni sadržaj se prenosi u
contentHandler. - Sistem prikazuje modifikovano obaveštenje.
Ograničenja:
- Kratkotrajno izvršavanje (obično oko 30 sekundi).
- Ograničen pristup sistemskim resursima.
- Ne može da izvršava duge pozadinske zadatke.
Primer osnovne implementacije:
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 {
// Modifikujte sadržaj obaveštenja ovde...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Bez naslova") [izmenjeno]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Poziva se neposredno pre nego što će sistem prekinuti rad proširenja.
// Iskoristite ovo kao priliku da isporučite "najbolji mogući" modifikovani sadržaj,
// u suprotnom će biti isporučen originalni push payload.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}