Notification Payload — mi ez, JSON szerkezet és feldolgozás

Szerző: IT Sectr Megjelenés: 2026-03-20 Olvasási idő: 10 perc

Notification Payload — az a JSON-struktúra, amelyet a szerver az APNS-en keresztül küld egy iOS-eszközre, meghatározva a push-értesítés tartalmát és a fogadáskor tanúsított viselkedést. A payload kötelező és opcionális kulcsokat tartalmaz, amelyek a szöveget, hangot, badge-t, média-mellékleteket és háttérfeldolgozást vezérlik. A Apple Developer Documentation, 2026 szerint a payload maximális mérete 4096 bájt a szokásos értesítéseknél és 5120 bájt a VoIP push esetében, ami szigorú korlátozásokat ró az átvitt adatok mennyiségére.

Fő pontok

  • aps struktúra — kötelező szótár az alert, badge, sound és content-available kulcsokkal, amely meghatározza az értesítés vizuális és hangviselkedését.
  • Méretkorlát — a payload maximális mérete 4096 bájt az APNS és 5120 bájt a VoIP push esetében, a nagyobbakat az Apple szerver elutasítja.
  • Egyedi mezők — bármely további adat az aps-sel azonos szinten kerül átvitelre, és az értesítés fogadása után a userInfo-ban érhető el.
  • Alert lokalizációja — a title-loc-key, loc-key és loc-args kulcsok lehetővé teszik a lokalizált szöveg megjelenítését anélkül, hogy különböző payloadokat kellene küldeni minden nyelvhez.
  • Request-identifier — egyedi azonosító az APNS válaszában a kézbesítési állapot és az Apple szervertől érkező visszahívások nyomon követésére.

Mi az a Notification Payload

Notification Payload (az értesítés payloadja) — egy JSON-objektum, amelyet a szerver az APNS (Apple Push Notification Service) felé küld egy iOS-eszközre történő kézbesítés céljából. A payload tartalmazza a rendszer által az értesítés megjelenítéséhez szükséges összes adatot: címet, szöveget, hangot, badge-t és metaadatokat a háttérfeldolgozáshoz. A payload szerkezetét az Apple szigorúan szabályozza, és kötelező kulcsokat tartalmaz a rendszer általi helyes feldolgozáshoz.

A payload szerepe a push kézbesítésében

Amikor a szerver push-értesítést küld az APNS HTTP/2 API-ján keresztül, a kérés hitelesítési fejléceket és egy JSON-törzset — a payloadot — tartalmaz. Az APNS ellenőrzi a payload érvényességét: ha a JSON helytelen vagy meghaladja a méretkorlátot, az Apple szerver 400 Bad Request hibát ad vissza. Az érvényesítés után az APNS kézbesíti a payloadot az eszközre, ahol az iOS rendszer elemzi és meghatározza, hogyan dolgozza fel az értesítést — jelenítsen meg egy banner-t, indítson el egy háttérfeladatot vagy játsszon le egy hangot.

A payload formátumának fejlődése

Az APNS payload formátuma az iOS 2 egyszerű szöveges payloadjától a modern verziók többkomponensű JSON-struktúrájáig fejlődött. Az iOS 10 a mutable-content segítségével támogatást hozott a média-mellékletekhez, az iOS 12 a thread-id segítségével csoportosítást adott az értesítésekhez, az iOS 15 pedig bevezette a supports-live-activities-t a Live Activities számára. Ma a payload az értesítés kívánt viselkedésétől függően akár 15 különböző kulcsot is tartalmazhat.

Az APNS payload szerkezete: kötelező és opcionális kulcsok

A payload gyökér objektuma tartalmazza az aps szótárt és opcionális egyedi mezőket a felső szinten. Az aps szótár az egyetlen kötelező elem, de benne az értesítés típusától függően különböző kulcskombinációk lehetnek: alert, badge, sound, content-available, mutable-content, interruption-level és mások.

aps kulcsTípusRendeltetés
alertString vagy DictionaryAz értesítés szövege vagy objektum title, subtitle, body, lokalizációval
badgeNumberSzám az alkalmazás ikonján; 0 eltávolítja a badge-t
soundStringHangfájl neve vagy default a rendszerhanghoz
content-availableNumber (1)Háttér-aktiválási jelző; 1 = silent push
mutable-contentNumber (1)Service Extension aktiválási jelző a tartalom módosításához
categoryStringKategória azonosító a gombokhoz és Content Extensionhöz
thread-idStringCsoportazonosító az értesítések csoportosításához
interruption-levelStringMegszakítás szintje: passive, active, time-sensitive, critical
relevance-scoreNumber (0–1)Az értesítés prioritása az intelligens rangsoroló rendszer számára

Az alert kulcs: string és szótár formátum

Az alert kulcs lehet egy egyszerű karakterlánc (amely az értesítés törzsévé válik) vagy egy szótár a title, subtitle, body mezőkkel. A szótár formátum lehetővé teszi a cím és alcím külön beállítását a fő szövegtől. A lokalizált értesítésekhez a title-loc-key, title-loc-args, loc-key, loc-args kulcsok használatosak, amelyek az alkalmazás Localizable.strings fájljára hivatkoznak. Ez lehetővé teszi payload küldését egy adott nyelvű szöveg nélkül — az alkalmazás helyettesíti be a fordítást.

Megszakítások kezelése: interruption-level és relevance-score

Az iOS 15-től kezdve az Apple hozzáadta a Focus Mode mechanizmust, amely megköveteli a fejlesztőtől az értesítés megszakítási szintjének megadását. Az interruption-level a következő értékeket fogadja el: passive (hang nélkül, képernyő felébresztése nélkül), active (alapértelmezett viselkedés), time-sensitive (áttöri a fókuszt, speciális jogosultságot igényel) és critical (orvosi/vészhelyzetek). A relevance-score (0–1) kulcs segíti a Focus rendszert az értesítések rangsorolásában egy kategórián belül.

Értesítések csoportosítása thread-id segítségével

A thread-id kulcs csoportokba egyesíti az értesítéseket a Notification Centerben. Minden értesítés azonos thread-id-vel egyetlen csoportként jelenik meg, amelyet a felhasználó kibonthat. Ez különösen hasznos az üzenetküldő alkalmazásokban, ahol egy kapcsolattartó üzenetei össze lesznek csoportosítva, vagy az olyan alkalmazásokban, amelyek sok azonos típusú értesítést küldenek.

Egyedi mezők és adatátvitel

Egyedi mezők — az aps szótáron kívüli kulcsok, amelyeket a fejlesztő ad hozzá további adatok eszközre történő továbbításához. A szerver belefoglalja őket a payload gyökér JSON-objektumába, az alkalmazás pedig a userInfo-n keresztül kapja meg őket a UNNotificationContent-ben. Az egyedi mezők nem duplikálhatják az aps kulcsneveit a feldolgozás során fellépő konfliktusok elkerülése érdekében.

Az egyedi adatok korlátozásai

A fő korlátozás — a payload teljes mérete nem haladhatja meg a 4096 bájtot. Az egyedi mezők versengenek ezért a korlátért a kötelező aps kulcsokkal, ezért fontos minimalizálni az átvitt adatok méretét. Használjon rövid kulcsneveket (pl. uid a user-id helyett), kerülje a nagy JSON-struktúrákat, és csak azonosítókat küldjön, ne teljes adatobjektumokat.

Az egyedi mezők biztonsága és érvényesítése

Az egyedi mezők a szerverről érkeznek, és nem szabad ellenőrzés nélkül megbízni bennük. Mindig érvényesítse az egyedi mezők típusait és értékeit a feldolgozás során: ellenőrizze a kulcs meglétét optional binding segítségével, konvertálja a várt típusra as? String/Int/Dictionary segítségével, és kezelje az érték hiányának esetét. Soha ne használjon force unwrap (!) -ot a payload adataira — a szerver hibás adatokat küldhet, és az alkalmazás összeomlik.

json
{
    "aps": {
        "alert": {
            "title": "Új üzenet",
            "body": "Szia! Hogy vagy?"
        },
        "badge": 5,
        "sound": "default",
        "category": "message",
        "thread-id": "chat_4521",
        "mutable-content": 1
    },
    "sender-id": "user_789",
    "chat-id": "chat_4521",
    "message-type": "text",
    "image-url": "https://cdn.example.com/img.jpg"
}

Ajánlások az egyedi mezők elnevezéséhez

Használjon egységes elnevezési stílust az egyedi mezőkhöz a projekt összes payloadjában. kebab-case (message-type) vagy camelCase (messageType) — mindkét megközelítés elfogadható, de fontos, hogy a projekten belül egyet kövessen. Kerülje a hosszú neveket: uid a user-identifier helyett, img a profile-image-url helyett. A kulcsnév minden karaktere egy bájt a 4096-os korlátból.

Payload példák különböző értesítéstípusokhoz

Különböző forgatókönyvek push-értesítésekhez különböző kulcskombinációkra van szükség a payloadban. Vizsgáljunk meg néhány tipikus példát: egyszerű szöveges értesítés, lokalizált értesítés, Silent Push és Rich Notification média-melléklettel.

Egyszerű szöveges értesítés

Alap payload szöveggel és hanggal — minimális konfiguráció az értesítés megjelenítéséhez a felhasználónak. Alert karakterláncként rövid üzenetet ad, a sound default a szabványos rendszerhangot játssza le. A badge opcionális, és számlálót állít be az ikonon. A category és thread-id a csoportosításhoz és interaktivitáshoz kerül hozzáadásra.

json
{
    "aps": {
        "alert": "Emlékeztető: találkozó 15 perc múlva",
        "badge": 3,
        "sound": "default"
    }
}

Lokalizált értesítés

Különböző nyelvű eszközökre történő küldéshez használjon lokalizációs kulcsokat a rögzített szöveg helyett. title-loc-key az alkalmazás Localizable.strings fájljában lévő kulcsra hivatkozik, a title-loc-args pedig helyettesíti az argumentumokat. Ez lehetővé teszi egyetlen payload küldését minden eszközre, és az alkalmazás maga jeleníti meg a szöveget a megfelelő nyelven.

json
{
    "aps": {
        "alert": {
            "title-loc-key": "NEW_MESSAGE_TITLE",
            "title-loc-args": ["Anna"],
            "loc-key": "NEW_MESSAGE_BODY",
            "loc-args": ["Szia!"]
        },
        "sound": "message.caf"
    }
}

Silent Push háttér-szinkronizációval

Háttér-szinkronizációhoz az értesítés megjelenítése nélkül a content-available: 1 és az alert hiánya használatos. Az egyedi mezők jelzik a művelet típusát és a feldolgozandó adatokat. A rendszer aktiválja az alkalmazást a háttérben, meghívja a didReceiveRemoteNotification-t a fetchCompletionHandler-rel, és az alkalmazás elvégzi a szinkronizációt.

json
{
    "aps": {
        "content-available": 1
    },
    "sync-type": "invalidate-cache",
    "timestamp": "2026-07-03T12:00:00Z"
}

Rich Notification képpel

Média-melléklet megjelenítéséhez szükség van a mutable-content: 1-re a Service Extension aktiválásához és a kép URL-jére egy egyedi mezőben. mutable-content: 1 jelzi a rendszernek, hogy indítsa el a UNNotificationServiceExtension-t, amely letölti a képet az URL-ről és UNNotificationAttachmentként adja hozzá. A category egy regisztrált kategóriára mutat a műveleti gombok megjelenítéséhez.

json
{
    "aps": {
        "alert": {
            "title": "Új termék",
            "body": "Nézd meg az új kollekciót"
        },
        "category": "product",
        "mutable-content": 1
    },
    "media-url": "https://cdn.example.com/product.jpg"
}

Payload feldolgozása és elemzése az alkalmazásban

UNNotificationContent.userInfo tartalmazza a fogadott payload teljes szótárát a rendszer általi feldolgozás után. Az alkalmazás a UNUserNotificationCenter delegáltjában fér hozzá a payloadhoz az értesítés fogadásakor (az előtérben), az értesítésre kattintáskor, valamint a Service Extension-ben és Content Extension-ben. A helyes feldolgozás kötelező az egyedi adatok kinyeréséhez és a további műveletek meghatározásához.

Feldolgozás az AppDelegate-ben értesítésre kattintáskor

Amikor a felhasználó egy értesítésre kattint, a rendszer meghívja a didReceive response metódust a UNUserNotificationCenterDelegate-ben. A response.notification.request.content.userInfo-ban található a teljes payload. A fejlesztő kinyeri az egyedi mezőket, meghatározza a művelet típusát (pl. chat megnyitása, termék megtekintése), és meghívja a megfelelő navigációt az alkalmazásban.

swift
func userNotificationCenter(
    _ center: UNUserNotificationCenter,
    didReceive response: UNNotificationResponse,
    withCompletionHandler completionHandler: @escaping () -> Void
) {
    let userInfo = response.notification
        .request.content.userInfo

    guard let chatId = userInfo["chat-id"] as? String
    else {
        completionHandler()
        return
    }

    let messageType = userInfo["message-type"]
        as? String ?? "text"

    NavigationRouter.shared.navigate(
        to: .chat(chatId: chatId,
                  messageType: messageType))
    completionHandler()
}

Payload érvényesítése a Service Extension-ben

A Service Extension az értesítés megjelenítése előtt kapja meg a payloadot, és módosíthatja azt. A payload érvényesítése — az első lépés a didReceive-ben: ellenőrizze a kötelező egyedi mezők meglétét, a mellékletek URL-jének helyességét és az adattípust. Ha a payload érvénytelen, azonnal hívja meg a completion handlert az eredeti tartalommal, ne vesztegessen időt haszontalan feldolgozásra.

Payloadok naplózása és monitorozása

A push-értesítések éles környezetben történő hibakereséséhez használja a payloadok strukturált naplózását. Az OSLog lehetővé teszi a payload naplózását a notifications kategóriával és debug szinttel. A szerveroldalon kövesse nyomon az APNS-válaszokat: a sikeres válasz tartalmazza az apns-id-t a küldött payloadhoz való hozzárendeléshez, a 400-as hiba pedig érvénytelen JSON-t vagy méret túllépését jelzi.

Gyakran ismételt kérdések

Mekkora az APNS payload maximális mérete?

A payload maximális mérete — 4096 bájt a szokásos push-értesítéseknél és 5120 bájt a VoIP push (PushKit) esetében. Túllépés esetén az APNS 400 Bad Request hibát ad vissza. A méretet bájtokban számítják, nem karakterekben — vegye figyelembe az UTF-8 kódolást.

Hogyan küldhetek lokalizált értesítést több nyelven?

Használja a loc-key, title-loc-key, loc-args és title-loc-args kulcsokat az alert-en belül. Az alkalmazás a saját Localizable.strings fájljából helyettesíti a fordítást az eszköz nyelve alapján. Ez lehetővé teszi egyetlen payload küldését minden eszközre, függetlenül azok nyelvétől.

Mi a különbség a content-available és a mutable-content között?

content-available aktiválja az alkalmazást a háttérben adatfeldolgozáshoz (silent push) az értesítés megjelenítése nélkül. mutable-content aktiválja a Service Extension-t a tartalom megjelenítés előtti módosításához. Mindkét kulcs használható együtt a háttérfeldolgozáshoz és az értesítés későbbi módosításához.

Hogyan ellenőrizhetem, hogy a szerver helyes payloadot küldött?

Használja az APNS Sandbox-ot teszteléshez, és ellenőrizze az Apple szerver HTTP-válaszát: a 200 OK sikeres küldést jelent. A struktúra érvényesítéséhez használjon JSON-sémákat a CI/CD pipeline-ban. Az Xcode-ban küldjön tesztértesítéseket a szimulátoron keresztül az xcrun simctl push paranccsal.

Mi az az apns-id az Apple szerver válaszában?

apns-id — a push-értesítés egyedi azonosítója az APNS rendszerben, amelyet a sikeres küldésre adott válasz tartalmaz. A kézbesítés Logs API-n keresztüli nyomon követésére és hibakeresésre használják. A szervernek el kell mentenie az apns-id-t minden elküldött értesítéshez.

Összefoglalás

  • Notification Payload — a push-értesítés JSON-struktúrája a kötelező aps szótárral, amely meghatározza a szöveget, hangot, badge-t és háttérfeldolgozást.
  • Méretkorlát — 4096 bájt az APNS, 5120 bájt a VoIP esetében; a túllépés 400 Bad Request hibát eredményez az Apple szervertől.
  • Az aps szótár tartalmazza az alert, badge, sound, content-available, mutable-content, category, thread-id, interruption-level és relevance-score kulcsokat.
  • Az egyedi mezők az aps-en kívül kerülnek továbbításra és a userInfo-n keresztül nyerhetők ki; mindig érvényesítse a típusokat és értékeket a feldolgozás során.
  • Lokalizáció a loc-key és title-loc-key segítségével valósul meg, amelyek az alkalmazás Localizable.strings fájljára hivatkoznak a fordítás beillesztéséhez.
  • interruption-level kezeli az értesítés viselkedését Focus módban: passive, active, time-sensitive vagy critical.
  • Notification Payload — az egész push-értesítési rendszer alapja, amelynek helyességétől függ minden értesítés kézbesítése, megjelenítése és feldolgozása az eszközön.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is