APNS (Apple Push Notification Service) — bu Apple ekotizim qurilmalariga push bildirishnomalarini yetkazib berish uchun infratuzilmaviy xizmat: iPhone, iPad, Mac, Apple Watch va Apple TV. Xizmat qurilma va Apple serverlari o‘rtasida doimiy TLS aloqasi orqali xabarlarning ishonchli uzatilishini ta‘minlaydi. Apple Developer Documentation ga ko‘ra, APNS ilova serverlari bilan ikki tomonlama aloqa uchun HTTP/2 protokolidan foydalanadi.
Asosiy ma’lumotlar
Apple Push Notification Service (APNS) — bu ilova serveridan foydalanuvchi qurilmalariga push bildirishnomalarini yo‘naltirish uchun Apple-ning o‘z xizmati. FCM dan farqli o‘laroq, APNS Android yoki boshqa platformalarni qo‘llab-quvvatlamaydi — u butunlay Apple ekotizimiga bog‘liq.
Xizmat doimiy TLS aloqasi orqali ishlaydi. Har bir Apple qurilmasi yoqilganda APNS serverlari bilan ushbu aloqani o‘rnatadi. Bu aloqa fonda saqlanadi va bildirishnomalarni minimal kechikish bilan yetkazish uchun ishlatiladi.
APNS yetkazish infratuzilmasini to‘liq o‘z zimmasiga oladi: shifrlash, autentifikatsiya, prioritetlashtirish va qurilma mavjud bo‘lmaganda qayta yuborish. Dasturchi faqat to‘g‘ri formatlangan yuk va haqiqiy push token taqdim etishi kerak.
Dastlab APNS 2195–2196 portlarida ikkilik protokol orqali ishlagan. 2015 yildan Apple multiplexatsiya, sarlavha siqish va server push bildirishnomalarini qo‘llab-quvvatlaydigan zamonaviy HTTP/2 protokoliga o‘tdi. HTTP/2 2020 yil iyunidan majburiy bo‘ldi.
APNS orqali push bildirishnomasini yetkazish jarayoni besh bosqichdan iborat: qurilmani ro‘yxatdan o‘tkazish, push token olish, server so‘rovi, APNS yo‘naltirish va qurilmaga yetkazish.
Agar qurilma mavjud bo‘lmasa (o‘chirilgan yoki tarmoqsiz), APNS har bir ilova uchun oxirgi xabarni saqlaydi va aloqa tiklanganida yetkazadi. Maksimal saqlash muddati — 4 hafta, keyin xabar o‘chiriladi.
Apple push bildirishnomalarini yuborishda ilova serverini autentifikatsiya qilishning ikki usulini qo‘llab-quvvatlaydi. Har bir usulning muddati, boshqaruvi va foydalanish qulayligi bo‘yicha o‘z xususiyatlari bor.
| Parametr | Token-based (p8) | Certificate-based (.p12) |
|---|---|---|
| Amal qilish muddati | Cheksiz (kalit muddati tugamaydi) | Sertifikat muddati bilan cheklangan (odatda 1 yil) |
| Rotatsiya | Agar kalit buzilmagan bo‘lsa, talab qilinmaydi | Majburiy yillik almashtirish |
| Ko‘p ilovalilik | Hisobdagi barcha ilovalar uchun bitta kalit | Har bir ilova uchun alohida sertifikat |
| Muhit | Sandbox va Production uchun bitta kalit | Sandbox va Production uchun turli sertifikatlar |
Token-based autentifikatsiya — 2019 yildan Apple tomonidan tavsiya etilgan usul. Apple Developer Console da bitta p8 kalit yaratasiz, uni serverga yuklaysiz va har bir APNS so‘rovini u bilan imzolaysiz. Kalit muddati tugamaydi va hisobingizdagi barcha ilovalar uchun ishlaydi.
Yangi loyihalar uchun Token-based autentifikatsiya shubhasiz afzal: butun hisob uchun bitta p8 kalit, cheksiz muvvafat, muhitga bog‘liq emas. Certificate-based (.p12) hali ham eski loyihalarda ishlatiladi, lekin yillik almashtirish va Sandbox va Production uchun alohida sertifikatlar talab qiladi. CI/CD rejalashtirishda sertifikatning amal qilish muddatini hisobga oling.
APNS qurilmada xulq-atvori va so‘rov atributlariga talablari bilan farqlanadigan uch turdagi push bildirishnomalarini qo‘llab-quvvatlaydi. Tur tanlash UX stsenariysi va xabarning shoshilinchligiga bog‘liq.
Background bildirishnomalari uchun content-available: 1 kalitini ko‘rsatish va prioritetni 5 (energiya tejamkor yetkazish) qilish kerak. Agar ilova fon bildirishnomalarini o‘z vaqtida qayta ishlamasa, tizim ularning sonini cheklashi mumkin.
APNS ikki prioritet qiymatini qo‘llab-quvvatlaydi: 10 (zudlik bilan yetkazish) va 5 (energiya tejamkor). Alert bildirishnomalari uchun 10 dan foydalaning — foydalanuvchi ularni darhol olishi kerak. Background uchun 5 dan foydalaning — tizim batareyani tejash uchun yetkazishni kechiktirishi mumkin. Background uchun noto‘g‘ri prioritet APNS tomonidan bildirishnomani rad etishga olib kelishi mumkin.
APNS oddiy bildirishnomalar uchun maksimal 4 KB va VOIP uchun 5 KB hajmdagi JSON formatidagi yukni qabul qiladi. Yuk ekran sozlamalari bilan majburiy aps lug‘ati va ixtiyoriy maxsus maydonlardan iborat.
{
"aps": {
"alert": {
"title": "Yangi xabar",
"body": "Sizda 3 ta o‘qilmagan chat bor"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
thread-id kaliti iOS Bildirishnomalar Markazida bildirishnomalarni guruhlarga birlashtiradi. category kaliti bildirishnomani harakat tugmalarini ko‘rsatish uchun UNNotificationCategory bilan bog‘laydi. Bu kalitlarsiz barcha bildirishnomalar alohida ko‘rsatiladi.
Majburiy aps lug‘atidan tashqari, APNS yuki yuqori darajada istalgan maxsus maydonlarni o‘z ichiga olishi mumkin. Bu maydonlar bildirishnomani qayta ishlashda ilovaga userInfo lug‘ati orqali mavjud bo‘ladi. Maxsus ma’lumotlar ob’ekt identifikatorlari, ekranlar yoki havolalarni uzatish uchun qulaydir. Yukning maksimal hajmi 4 KB, shuning uchun push orqali katta hajmdagi ma‘lumotlarni uzatishdan saqlaning; ularni bildirishnoma ochilgandan keyin API orqali yuklang.
Push bildirishnomasini yuborish uchun serverda to‘g‘ri autentifikatsiya sarlavhalari bilan APNS endpointiga POST so‘rovi yuborish kerak. Quyida Token-based autentifikatsiya bilan Node.js misoli keltirilgan.
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: "Salom!", 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("Push muvaffaqiyatli yuborildi")
}
})
Yuborishdan so‘ng APNS muvaffaqiyatli yetkazishda HTTP status 200 yoki javob tanasida tavsifi bilan xato kodini qaytaradi. token-unregistered (410) xatosini qayta ishlash muhim — bunday token serverdan o‘chirilishi kerak, chunki ilova qurilmadan o‘chirilgan.
APNS har bir yuborish so‘rovi uchun HTTP statuslarini qaytaradi. Muvaffaqiyatli yuborish — status 200. Xatolar turli qayta ishlash strategiyalarini talab qiladi. BadDeviceToken (400) yoki Unregistered (410) — qurilma tokeni eskirgan, serverdan o‘chirilishi kerak. PayloadTooLarge (413) — 4 KB chegarasi oshib ketgan, yukni qisqartiring.
TooManyRequests (429) xatosi — so‘rov chegarasi oshib ketgan. APNS soniyada yuborishlar soniga kvota belgilaydi. 429 qabul qilinganda eksponensial kechikish (exponential backoff) qo‘llanilishi va yuborish takrorlanishi kerak. Bitta HTTP/2 ulanishi uchun soniyada 100 so‘rovdan oshmaslik tavsiya etiladi.
APNS tomonidagi xatolar — 500 va 503 (Internal Server Error / Service Unavailable). Bular Apple infratuzilmasining vaqtinchalik nosozliklari. Bunday hollarda 1–5 soniya kechikish bilan, 3 urinishdan ko‘p bo‘lmagan holda yuborishni takrorlang. To‘liq ishlaydigan serverda doimiy 5xx xatolari kam uchraydi va odatda TLS aloqasi muammolari bilan bog‘liq.
Production muhiti uchun token, xato kodi va vaqtni ko‘rsatgan holda barcha APNS xatolarini jurnallashtirishni majburiy ravishda joriy qiling. Bu sertifikatlar, kvotalar yoki ma’lum qurilma tokenlari bilan bog‘liq muammolarni tez aniqlashga yordam beradi. Certificate-based autentifikatsiyadan foydalansangiz, sertifikatlarning amal qilish muddatini muntazam tekshiring.
Tez-tez beriladigan savollar
APNS HTTP/2 API uchun TCP 443 (HTTPS) orqali ishlaydi. Ilgari ikkilik protokol uchun 2195 va 2196 portlari ishlatilgan. 2020 yil iyunidan Apple 443 portida faqat HTTP/2 dan foydalanishni talab qiladi. Serverning api.push.apple.com ga chiqishi borligiga ishonch hosil qiling.
Sandbox — push bildirishnomalarini sozlash uchun APNS sinov muhiti. Production — haqiqiy foydalanuvchilar uchun ish muhiti. Token-based autentifikatsiya bilan bitta kalit ikkala muhit uchun ishlaydi — endpoint farq qiladi: api.sandbox.push.apple.com yoki api.push.apple.com.
Push token quyidagi hollarda o‘zgarishi mumkin: ilovani zaxiradan tiklash, ilovani qayta o‘rnatish, operatsion tizimni yangilash, tarmoq sozlamalarini tiklash. Token o‘zgarmaydi App Store orqali odatiy ilova yangilanishlarida. Server BadDeviceToken (400) xatosini tokenni o‘chirish uchun signal sifatida qayta ishlashi kerak.
Oddiy alert/background bildirishnomalari uchun 4 KB (4096 bayt). PushKit orqali VOIP uchun — 5 KB (5120 bayt). Hajm chegarasidan oshish PayloadTooLarge (413) xatosini qaytaradi. Yukni minimal saqlash va qo‘shimcha ma’lumotlarni server orqali yuklash tavsiya etiladi.
APNS internet aloqasi bo‘lmagan qurilmaga bildirishnoma yubora olmaydi. Qurilma oflayn bo‘lsa, APNS har bir ilova uchun oxirgi xabarni 28 kungacha saqlaydi. Aloqa tiklanganida xabar darhol yetkaziladi. Eski xabarlar saqlanmaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.