Sobes.tech
Middle

Ce este o extensie a serviciului de notificări?

sobes.tech AI

Răspuns de la AI

Extensia Serviciului de Notificări (Notification Service Extension) este o mică completare executabilă integrată în aplicația dvs. iOS. Aceasta permite modificarea aspectului conținutului unei notificări push remote înainte de afișarea acesteia utilizatorului.

Funcții principale:

  • Modificarea conținutului: Schimbarea titlului, subtitlului, textului sau adăugarea de atașamente (imagini, videoclipuri) la notificare.
  • Decriptarea conținutului criptat: Decriptarea datelor criptate trimise împreună cu notificarea înainte de a fi afișate utilizatorului.
  • Notificări bogate: În combinație cu extensia de conținut a notificărilor (Notification Content Extension), permite crearea de interfețe personalizate pentru afișarea notificărilor.

Ciclul de viață:

  1. La primirea unei notificări remote cu cheia mutable-content: 1, sistemul inițiază pornirea extensiei serviciului de notificări.
  2. Se implementează metoda didReceive(_:withContentHandler:), în care se procesează și modifică notificarea.
  3. Conținutul modificat este transmis către handler-ul de finalizare contentHandler.
  4. Sistemul afișează notificarea modificată.

Limitări:

  • Executare de scurtă durată (de obicei în jur de 30 de secunde).
  • Acces limitat la resursele sistemului.
  • Nu poate executa sarcini lungi în fundal.

Exemplu de implementare de bază:

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 {
            // Modificați conținutul notificării aici...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Fără titlu") [modificat]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Apelat chiar înainte ca extensia să fie terminată de sistem.
        // Folosiți această ocazie pentru a livra "cea mai bună încercare" a conținutului modificat,
        // altfel, va fi livrată încărcătura utilă push originală.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}