Sobes.tech
Middle

Kas yra pranešimų tarnybos plėtinys?

sobes.tech AI

Atsakymas iš AI

Notification Service Extension yra mažas vykdomasis papildinys, įmontuotas į jūsų iOS programėlę. Jis leidžia pakeisti nuotolinio push pranešimo turinio išvaizdą prieš jį parodyti naudotojui.

Pagrindinės funkcijos:

  • Turinio modifikavimas: Pavadinimo, antraštės, teksto keitimas arba priedų (nuotraukų, vaizdo įrašų) pridėjimas prie pranešimo.
  • Užšifruoto turinio dešifravimas: Šifruotų duomenų dekodavimas, siunčiamų kartu su pranešimu, prieš juos parodyti naudotojui.
  • Turtingi pranešimai: Naudojant kartu su Notification Content Extension, leidžia kurti pritaikytus sąsajos elementus pranešimų rodymui.

Gyvenimo ciklas:

  1. Kai gaunamas nuotolinis pranešimas su raktu mutable-content: 1, sistema inicijuoja Notification Service Extension paleidimą.
  2. Iškviečiamas metodas didReceive(_:withContentHandler:), kuriame apdorojamas ir modifikuojamas pranešimas.
  3. Pakeistas turinys perduodamas contentHandler.
  4. Sistema rodo pakeistą pranešimą.

Apribojimai:

  • Trumpalaikis vykdymas (paprastai apie 30 sekundžių).
  • Ribotas prieigos prie sistemos išteklių kiekis.
  • Negali vykdyti ilgalaikių foninių užduočių.

Pagrindinis realizacijos pavyzdys:

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 {
            // Modifikuokite pranešimo turinį čia...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Be pavadinimo") [pakeista]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Kviečiama prieš tai, kai sistema užbaigs papildinio veikimą.
        // Naudokite tai kaip galimybę pristatyti "geriausią bandymą" pakeistam turiniui,
        // kitaip bus pristatytas originalus push payload.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}