APNS (Apple Push Notification Service) — ay isang serbisyong pang-imprastraktura ng Apple para sa paghahatid ng mga push notification sa mga aparato ng ecosystem: iPhone, iPad, Mac, Apple Watch at Apple TV. Tinitiyak ng serbisyo ang maaasahang paghahatid ng mensahe sa pamamagitan ng permanenteng TLS na koneksyon sa pagitan ng aparato at mga server ng Apple. Ayon sa Apple Developer Documentation, ang APNS ay gumagamit ng HTTP/2 protocol para sa dalawang-direksyong komunikasyon sa mga server ng aplikasyon.
Mga Pangunahing Punto
Ang Apple Push Notification Service (APNS) — ay sariling serbisyo ng Apple para sa pagruta ng mga push notification mula sa server ng aplikasyon patungo sa mga aparato ng mga gumagamit. Hindi tulad ng FCM, hindi sinusuportahan ng APNS ang Android o iba pang mga platform — ito ay ganap na nakatali sa ecosystem ng Apple.
Ang serbisyo ay gumagana sa pamamagitan ng isang permanenteng TLS na koneksyon na itinatag ng bawat Apple device sa mga server ng APNS kapag naka-on. Ang koneksyong ito ay pinapanatili sa background at ginagamit para sa paghahatid ng mga notification na may minimal na pagkaantala.
Ang APNS ay pumapangalaga sa buong imprastraktura ng paghahatid: encryption, autentikasyon, prioritisasyon, at muling pagpapadala kung hindi available ang device. Ang developer ay kailangan lamang magbigay ng wastong na-format na payload at isang valid na push token.
Sa simula, ang APNS ay gumagana sa pamamagitan ng isang binary protocol sa mga port 2195–2196. Mula noong 2015, lumipat ang Apple sa modernong HTTP/2 protocol na sumusuporta sa multiplexing, header compression, at server push notification. Ang HTTP/2 ay naging mandatory mula Hunyo 2020.
Ang proseso ng paghahatid ng push notification sa pamamagitan ng APNS ay binubuo ng limang yugto: pagrehistro ng device, pagkuha ng push token, pagpapadala ng kahilingan ng server, pagruta ng APNS, at paghahatid sa device.
Kung ang device ay hindi available (naka-off o walang network), iniimbak ng APNS ang huling mensahe para sa bawat app at ihahatid ito kapag naibalik ang koneksyon. Ang maximum na oras ng pag-iimbak ay 4 na linggo, pagkatapos nito ay tatanggalin ang mensahe.
Sinusuportahan ng Apple ang dalawang paraan ng autentikasyon ng server ng aplikasyon kapag nagpapadala ng push notification. Ang bawat paraan ay may sariling mga katangian tungkol sa panahon ng bisa, pamamahala, at kadalian ng paggamit.
| Parameter | Token-based (p8) | Certificate-based (.p12) |
|---|---|---|
| Bisa | Walang hanggan (hindi nag-e-expire ang key) | Limitado sa panahon ng certificate (karaniwang 1 taon) |
| Rotasyon | Hindi kinakailangan kung hindi nakompromiso ang key | Sapilitang taunang pagpapalit |
| Multi-app | Isang key para sa lahat ng app ng account | Hiwalay na certificate para sa bawat app |
| Kapaligiran | Isang key para sa Sandbox at Production | Iba't ibang certificate para sa Sandbox at Production |
Token-based autentikasyon — ang inirerekomendang paraan ng Apple mula noong 2019. Gumagawa ka ng isang p8 key sa Apple Developer Console, ina-upload ito sa server, at pinipirmahan ang bawat APNS request dito. Hindi nag-e-expire ang key at gumagana para sa lahat ng app ng iyong account.
Para sa mga bagong proyekto, ang Token-based autentikasyon ay tiyak na mas gusto: isang p8 key para sa buong account, walang hanggan, walang dependency sa kapaligiran. Ang Certificate-based (.p12) ay ginagamit pa rin sa mga legacy na proyekto, ngunit nangangailangan ng taunang pagpapalit at hiwalay na certificate para sa Sandbox at Production. Isaalang-alang ang expiry date ng certificate kapag nagpaplano ng CI/CD.
Sinusuportahan ng APNS ang tatlong uri ng push notification na nagkakaiba sa pag-uugali sa device at mga kinakailangan sa attribute ng kahilingan. Ang pagpili ng uri ay depende sa UX scenario at pagka-apura ng mensahe.
Para sa Background notification, kailangan mong isama ang key na content-available: 1 at itakda ang priyoridad sa 5 (matipid sa enerhiya na paghahatid). Maaaring limitahan ng system ang bilang ng background notification kung hindi ito pinoproseso ng app sa tamang oras.
Sinusuportahan ng APNS ang dalawang halaga ng priyoridad: 10 (agarang paghahatid) at 5 (matipid sa enerhiya). Para sa alert notification gamitin ang 10 — dapat matanggap agad ng gumagamit ang mga ito. Para sa background gamitin ang 5 — maaaring maantala ng system ang paghahatid upang makatipid ng baterya. Ang maling priyoridad para sa background ay maaaring humantong sa pagtanggi ng notification ng APNS.
Tumatanggap ang APNS ng payload sa JSON format na may maximum na sukat na 4 KB para sa ordinaryong notification at 5 KB para sa VOIP. Ang payload ay naglalaman ng sapilitang diksyunaryong aps na may mga setting ng pagpapakita at opsyonal na custom na mga field.
{
"aps": {
"alert": {
"title": "Bagong mensahe",
"body": "Mayroon kang 3 hindi nababasang chat"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
Ang key na thread-id ay nag-grupo ng mga notification sa iOS Notification Center. Ang key na category ay nag-uugnay ng notification sa UNNotificationCategory para sa pagpapakita ng mga action button. Kung wala ang mga key na ito, lahat ng notification ay ipinapakita nang paisa-isa.
Bukod sa sapilitang diksyunaryong aps, ang APNS payload ay maaaring maglaman ng anumang custom na field sa pinakamataas na antas. Ang mga field na ito ay accessible sa app sa pamamagitan ng userInfo dictionary kapag pinoproseso ang notification. Ang custom na data ay kapaki-pakinabang para sa pagpapadala ng mga entity ID, screen, o link. Ang maximum na sukat ng payload ay 4 KB, kaya iwasan ang pagpapadala ng malaking halaga ng data sa pamamagitan ng push; i-load ang mga ito sa pamamagitan ng API pagkatapos buksan ang notification.
Upang magpadala ng push notification sa server, kailangan mong magsagawa ng POST request sa APNS endpoint na may tamang authentication headers. Sa ibaba ay isang halimbawa sa Node.js gamit ang Token-based authentication.
const http2 = require("http2")
const fs = require("fs")
const jwt = require("jsonwebtoken")
const token = jwt.sign(
{ iss: "TEAM_ID", iat: Math.floor(Date.now() / 1000) },
fs.readFileSync("AuthKey.p8"),
{ algorithm: "ES256", keyid: "KEY_ID" }
)
const payload = JSON.stringify({
aps: { alert: { title: "Kamusta!", body: "Test push" } }
})
const client = http2.connect(
"https://api.push.apple.com"
)
const req = client.request({
":method": "POST",
":path": "/3/device/DEVICE_PUSH_TOKEN",
"authorization": "bearer " + token,
"apns-push-type": "alert",
"apns-topic": "com.example.app",
"apns-priority": "10"
})
req.end(payload)
req.on("response", (headers) => {
if (headers[":status"] === 200) {
console.log("Matagumpay na naipadala ang push")
}
})
Pagkatapos ng pagpapadala, ibinabalik ng APNS ang HTTP status na 200 para sa matagumpay na paghahatid o error code na may paglalarawan sa body ng tugon. Mahalagang hawakan ang error na token-unregistered (410) — ang naturang token ay dapat tanggalin sa server dahil ang app ay tinanggal na sa device.
Ibinabalik ng APNS ang mga HTTP status para sa bawat kahilingan sa pagpapadala. Matagumpay na pagpapadala — status 200. Ang mga error ay nangangailangan ng iba't ibang mga estratehiya sa paghawak. BadDeviceToken (400) o Unregistered (410) — ang token ng device ay luma na, dapat tanggalin mula sa server. PayloadTooLarge (413) — nalampasan ang limit na 4 KB, paikliin ang payload.
Error TooManyRequests (429) — nalampasan ang limit ng mga kahilingan. Nagtatakda ang APNS ng quota sa bilang ng mga pagpapadala bawat segundo. Kapag nakatanggap ng 429, kailangan mong magpatupad ng exponential backoff at subukan muli ang pagpapadala. Inirerekomenda na huwag lumampas sa 100 kahilingan bawat segundo bawat HTTP/2 connection.
Mga error mula sa panig ng APNS — 500 at 503 (Internal Server Error / Service Unavailable). Ito ay mga pansamantalang pagkasira ng imprastraktura ng Apple. Sa ganitong mga kaso, ulitin ang pagpapadala na may pagkaantala ng 1–5 segundo, hindi hihigit sa 3 pagtatangka. Ang patuloy na 5xx error sa ganap na gumaganang server ay bihira at karaniwang nauugnay sa mga problema sa TLS connection.
Para sa Production na kapaligiran, kinakailangan mong ipatupad ang pag-log ng lahat ng APNS error na may indikasyon ng token, error code, at oras. Makakatulong ito upang mabilis na matukoy ang mga problema sa mga certificate, quota, o partikular na device token. Regular na suriin ang expiry date ng mga certificate kung gumagamit ka ng Certificate-based authentication.
Mga Madalas Itanong
Ang APNS ay gumagana sa pamamagitan ng TCP 443 (HTTPS) para sa HTTP/2 API. Dati, ginamit ang mga port 2195 at 2196 para sa binary protocol. Mula noong Hunyo 2020, kinakailangan ng Apple na gumamit lamang ng HTTP/2 sa port 443. Tiyakin na ang server ay may access sa api.push.apple.com.
Ang Sandbox — ay test environment ng APNS para sa pag-debug ng push notification. Production — ay production environment para sa mga tunay na gumagamit. Sa Token-based authentication, isang key ang gumagana para sa parehong kapaligiran — ang endpoint ay nagkakaiba: api.sandbox.push.apple.com o api.push.apple.com.
Ang push token ay maaaring magbago kapag: nirestore ang app mula sa backup, muling ini-install ang app, nag-update ng operating system, ni-reset ang mga setting ng network. Hindi nagbabago ang token sa ordinaryong pag-update ng app sa pamamagitan ng App Store. Dapat hawakan ng server ang error na BadDeviceToken (400) bilang signal upang tanggalin ang token.
4 KB (4096 bytes) para sa ordinaryong alert/background notification. Para sa VOIP sa pamamagitan ng PushKit — 5 KB (5120 bytes). Ang paglampas sa sukat ay nagbabalik ng error na PayloadTooLarge (413). Inirerekomenda na panatilihing minimal ang payload at mag-load ng karagdagang data sa pamamagitan ng server.
Ang APNS ay hindi maaaring maghatid ng notification sa isang device na walang internet connection. Kung offline ang device, iniimbak ng APNS ang huling mensahe (per app per device) hanggang 28 araw. Kapag naibalik ang koneksyon, agad na ihahatid ang mensahe. Ang mga mas lumang mensahe ay hindi iniimbak.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din