Middle
Kas yra pranešimų tarnybos plėtinys?
sobes.tech AI
Atsakymas iš AI
Notification Service Extension yra mažas vykdomasis papildinys, įmontuotas į jūsų iOS programėlę. Jis leidžia pakeisti nuotolinio push pranešimo turinio išvaizdą prieš jį parodyti naudotojui.
Pagrindinės funkcijos:
- Turinio modifikavimas: Pavadinimo, antraštės, teksto keitimas arba priedų (nuotraukų, vaizdo įrašų) pridėjimas prie pranešimo.
- Užšifruoto turinio dešifravimas: Šifruotų duomenų dekodavimas, siunčiamų kartu su pranešimu, prieš juos parodyti naudotojui.
- Turtingi pranešimai: Naudojant kartu su Notification Content Extension, leidžia kurti pritaikytus sąsajos elementus pranešimų rodymui.
Gyvenimo ciklas:
- Kai gaunamas nuotolinis pranešimas su raktu
mutable-content: 1, sistema inicijuoja Notification Service Extension paleidimą. - Iškviečiamas metodas
didReceive(_:withContentHandler:), kuriame apdorojamas ir modifikuojamas pranešimas. - Pakeistas turinys perduodamas
contentHandler. - Sistema rodo pakeistą pranešimą.
Apribojimai:
- Trumpalaikis vykdymas (paprastai apie 30 sekundžių).
- Ribotas prieigos prie sistemos išteklių kiekis.
- Negali vykdyti ilgalaikių foninių užduočių.
Pagrindinis realizacijos pavyzdys:
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 {
// Modifikuokite pranešimo turinį čia...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Be pavadinimo") [pakeista]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Kviečiama prieš tai, kai sistema užbaigs papildinio veikimą.
// Naudokite tai kaip galimybę pristatyti "geriausią bandymą" pakeistam turiniui,
// kitaip bus pristatytas originalus push payload.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}