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
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.
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.
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.
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 kulcs | Típus | Rendeltetés |
|---|---|---|
| alert | String vagy Dictionary | Az értesítés szövege vagy objektum title, subtitle, body, lokalizációval |
| badge | Number | Szám az alkalmazás ikonján; 0 eltávolítja a badge-t |
| sound | String | Hangfájl neve vagy default a rendszerhanghoz |
| content-available | Number (1) | Háttér-aktiválási jelző; 1 = silent push |
| mutable-content | Number (1) | Service Extension aktiválási jelző a tartalom módosításához |
| category | String | Kategória azonosító a gombokhoz és Content Extensionhöz |
| thread-id | String | Csoportazonosító az értesítések csoportosításához |
| interruption-level | String | Megszakítás szintje: passive, active, time-sensitive, critical |
| relevance-score | Number (0–1) | Az értesítés prioritása az intelligens rangsoroló rendszer számára |
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.
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.
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 — 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.
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 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.
{
"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"
}
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.
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.
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.
{
"aps": {
"alert": "Emlékeztető: találkozó 15 perc múlva",
"badge": 3,
"sound": "default"
}
}
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.
{
"aps": {
"alert": {
"title-loc-key": "NEW_MESSAGE_TITLE",
"title-loc-args": ["Anna"],
"loc-key": "NEW_MESSAGE_BODY",
"loc-args": ["Szia!"]
},
"sound": "message.caf"
}
}
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.
{
"aps": {
"content-available": 1
},
"sync-type": "invalidate-cache",
"timestamp": "2026-07-03T12:00:00Z"
}
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.
{
"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"
}
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.
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.
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()
}
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.
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
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.
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.
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.
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.
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
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.
Olvassa el is