Sobes.tech
Middle

Šta je proširenje usluge obaveštenja?

sobes.tech АИ

Одговор од АИ

Proširenje usluge obaveštenja (Notification Service Extension) je mali izvršni dodatak ugrađen u vašu iOS aplikaciju. Omogućava promenu izgleda sadržaja udaljenog push obaveštenja pre njegovog prikaza korisniku.

Glavne funkcije:

  • Modifikacija sadržaja: Promena naslova, podnaslova, teksta ili dodavanje priloga (slika, video) u obaveštenje.
  • Dešifrovanje šifrovanog sadržaja: Dekodiranje šifrovanih podataka poslatih zajedno sa obaveštenjem pre njihovog prikaza korisniku.
  • Bogata obaveštenja: U kombinaciji sa proširenjem sadržaja obaveštenja (Notification Content Extension), omogućava kreiranje prilagođenih interfejsa za prikaz obaveštenja.

Životni ciklus:

  1. Prilikom primanja udaljenog obaveštenja sa ključem mutable-content: 1, sistem inicira pokretanje proširenja usluge obaveštenja.
  2. Poziva se metoda didReceive(_:withContentHandler:), u kojoj se vrši obrada i modifikacija obaveštenja.
  3. Izmenjeni sadržaj se prenosi u contentHandler.
  4. Sistem prikazuje modifikovano obaveštenje.

Ograničenja:

  • Kratkotrajno izvršavanje (obično oko 30 sekundi).
  • Ograničen pristup sistemskim resursima.
  • Ne može da izvršava duge pozadinske zadatke.

Primer osnovne implementacije:

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 sadržaj obaveštenja ovde...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Bez naslova") [izmenjeno]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Poziva se neposredno pre nego što će sistem prekinuti rad proširenja.
        // Iskoristite ovo kao priliku da isporučite "najbolji mogući" modifikovani sadržaj,
        // u suprotnom će biti isporučen originalni push payload.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}