Middle
Mi az értesítési szolgáltatás bővítése?
sobes.tech MI
Válasz az MI-től
Az értesítési szolgáltatás kiterjesztése (Notification Service Extension) egy kis végrehajtható kiegészítés, amely beépített az iOS alkalmazásába. Lehetővé teszi a távoli push értesítés tartalmának megjelenés előtti módosítását.
Fő funkciók:
- Tartalom módosítása: A cím, alcím, szöveg módosítása vagy mellékletek (képek, videók) hozzáadása az értesítéshez.
- Titkosított tartalom dekódolása: A titkosított adatok dekódolása, amelyeket az értesítéssel együtt küldtek, mielőtt megjelennek a felhasználónak.
- Gazdag értesítések: Az értesítési tartalom kiterjesztésével (Notification Content Extension) kombinálva lehetőséget ad egyedi felületek létrehozására az értesítések megjelenítéséhez.
Életciklus:
- Amikor egy távoli értesítést fogadnak a
mutable-content: 1kulccsal, a rendszer elindítja az értesítési szolgáltatás kiterjesztését. - A
didReceive(_:withContentHandler:)metódus kerül implementálásra, amelyben az értesítés feldolgozása és módosítása történik. - A módosított tartalom átadásra kerül a
contentHandlervégrehajtónak. - A rendszer megjeleníti a módosított értesítést.
Korlátozások:
- Rövid ideig tartó végrehajtás (általában kb. 30 másodperc).
- Korlátozott hozzáférés a rendszer erőforrásaihoz.
- Nem képes hosszú háttérfeladatok végrehajtására.
Alapvető implementáció példája:
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 {
// Módosítsa az értesítés tartalmát itt...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Nincs Cím") [módosított]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// A rendszer a kiterjesztés véglegesítése előtt hívja meg.
// Használja ezt a lehetőséget, hogy a "legjobb próbálkozását" adja át a módosított tartalomnak,
// különben az eredeti push payload kerül átadásra.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}