Sobes.tech
Middle

Čo je rozšírenie služby oznámení?

sobes.tech AI

Odpoveď od AI

Rozšírenie služby oznámení (Notification Service Extension) je malé spustiteľné rozšírenie vložené do vašej iOS aplikácie. Umožňuje zmeniť vzhľad obsahu vzdialeného push oznámenia pred jeho zobrazením používateľovi.

Hlavné funkcie:

  • Modifikácia obsahu: Zmena nadpisu, podnadpisu, textu alebo pridanie príloh (obrázky, videá) k oznámeniu.
  • Dešifrovanie šifrovaného obsahu: Dekódovanie šifrovaných dát odoslaných spolu s oznámením pred ich zobrazením používateľovi.
  • Bohaté oznámenia: V kombinácii s rozšírením obsahu oznámení (Notification Content Extension), umožňuje vytváranie vlastných rozhraní na zobrazenie oznámení.

Životný cyklus:

  1. Pri prijatí vzdialeného oznámenia s kľúčom mutable-content: 1, systém iniciuje spustenie rozšírenia služby oznámení.
  2. Volá sa metóda didReceive(_:withContentHandler:), v ktorej sa spracováva a modifikuje oznámenie.
  3. Zmenený obsah sa odovzdáva do contentHandler.
  4. Systém zobrazuje modifikované oznámenie.

Obmedzenia:

  • Krátkodobé vykonávanie (zvyčajne okolo 30 sekúnd).
  • Obmedzený prístup k systémovým zdrojom.
  • Nemôže vykonávať dlhé pozadové úlohy.

Príklad základnej implementácie:

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 obsah oznámenia tu...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Žiadny nadpis") [modifikované]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Volá sa tesne pred ukončením rozšírenia systémom.
        // Využite túto príležitosť na doručenie "najlepšieho pokusu" o modifikovaný obsah,
        // inak bude doručený pôvodný push payload.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}