Sobes.tech
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:

  1. Amikor egy távoli értesítést fogadnak a mutable-content: 1 kulccsal, a rendszer elindítja az értesítési szolgáltatás kiterjesztését.
  2. 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.
  3. A módosított tartalom átadásra kerül a contentHandler végrehajtónak.
  4. 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)
        }
    }

}