APNS (Apple Push Notification Service) — bu Apple ekosistem cihazlarına push bildirişləri çatdırmaq üçün infrastruktur xidmətdir: iPhone, iPad, Mac, Apple Watch və Apple TV. Xidmət cihaz və Apple serverləri arasında daimi TLS əlaqəsi vasitəsilə mesajların etibarlı ötürülməsini təmin edir. Apple Developer Documentation-ya əsasən, APNS tətbiq serverləri ilə ikitərəfli əlaqə üçün HTTP/2 protokolundan istifadə edir.
Əsas məqamlar
Apple Push Notification Service (APNS) — bu tətbiq serverindən istifadəçi cihazlarına push bildirişlərini yönləndirmək üçün Apple-ın öz xidmətidir. FCM-dən fərqli olaraq, APNS Android və ya digər platformaları dəstəkləmir — tamamilə Apple ekosisteminə bağlıdır.
Xidmət daimi TLS əlaqəsi vasitəsilə işləyir. Hər bir Apple cihazı açıldıqda APNS serverləri ilə bu əlaqəni qurur. Bu əlaqə fonda saxlanılır və minimal gecikmə ilə bildirişlərin çatdırılması üçün istifadə olunur.
APNS çatdırma infrastrukturunu tamamilə öz üzərinə götürür: şifrələmə, doğrulama, prioritetləşdirmə və cihaz çatışmaz olduqda təkrari göndərmə. Tərtibatçı yalnız düzgün formatlanmış yük və etibarlı push token təqdim etməlidir.
Əvvəlcə APNS 2195–2196 portunda ikilik protokol vasitəsilə işləyirdi. 2015-ci ildən Apple multiplexasiya, başlıq sıxılması və server push-u dəstəkləyen müasir HTTP/2 protokoluna keçdi. HTTP/2 2020-ci ilin iyun ayından məcburi oldu.
APNS vasitəsilə push bildirişinin çatdırılması prosesi beş mərhələdən ibarətdir: cihazın qeydiyyatı, push token alınması, server sorğusu, APNS yönləndirməsi və cihaza çatdırma.
Əgər cihaz çatışmazdırsa (söndürülüb və ya şəbəkəsiz), APNS hər tətbiq üçün son mesajı saxlayır və əlaqə bərpa olunduqda çatdırır. Maksimum saxlama müddəti — 4 həftə, sonra mesaj silinir.
Apple push bildirişləri göndərərkən tətbiq serverinin doğrulanması üçün iki üsul dəstəkləyir. Hər üsulun müddət, idarəetmə və istifadə rahatlığı baxımından öz xüsusiyyətləri var.
| Parametr | Token-based (p8) | Certificate-based (.p12) |
|---|---|---|
| Müddət | Müəyyən müddətsiz (açar bitmir) | Sertifikat müddəti ilə məhdud (adətən 1 il) |
| Rotasiya | Tələb olunmur, açar kompromiz olunmayıbsa | İllik dəyişdirilmə məcburidir |
| Çoxtətbiqlilik | Hesabdakı bütün tətbiqlər üçün bir açar | Hər tətbiq üçün ayrı sertifikat |
| Mühit | Sandbox və Production üçün bir açar | Sandbox və Production üçün fərqli sertifikatlar |
Token-based doğrulama — 2019-cu ildən Apple tərəfindən tövsiyə olunan üsul. Apple Developer Console-da bir p8 açarı yaradır, serverə yükləyir və hər APNS sorğusunu onunla imzalayırsınız. Açar bitmir və hesabınızdakı bütün tətbiqlər üçün işləyir.
Yeni layihələr üçün Token-based doğrulama üstünlük təşkil edir: bütün hesab üçün bir p8 açarı, müəyyən müddətsiz, mühitə bağlı olmayan. Certificate-based (.p12) köhnə layihələrdə istifadə olunur, lakin illik dəyişdirilmə və Sandbox və Production üçün ayrı sertifikatlar tələb edir. CI/CD planlaşdırarkən sertifikatın bitmə müddətini nəzərə alın.
APNS cihazda davranışı və sorğu atributlarına tələbləri ilə fərqlənən üç növü push bildirişi dəstəkləyir. Növ seçimi UX ssenarisindən və mesajın təciliiliyindən asılıdır.
Background bildirişləri üçün content-available: 1 açarını göstərmək və prioriteti 5 (enerjiyə qənət edən çatdırma) təyin etmək lazımdır. Sistem tətbiq fon bildirişlərini vaxtında emal etməzsə, onların sayını məhdudlaşdıra bilər.
APNS iki prioritet dəyərini dəstəkləyir: 10 (dərhal çatdırma) və 5 (enerjiyə qənət). Alert bildirişləri üçün 10 istifadə edin — istifadəçi onları dərhal almalıdır. Background üçün 5 istifadə edin — sistem batareyaya qənət etmək üçün çatdırmanı gecikdirə bilər. Background üçün yanlış prioritet APNS tərəfindən bildirişin rədd edilməsinə səbəb ola bilər.
APNS adi bildirişlər üçün maksimum 4 KB və VOIP üçün 5 KB ölçüsündə JSON formatında yük qəbul edir. Yük ekran parametrləri ilə məcburi aps lüğəti və isteğə bağlı fərqli sahələrdən ibarətdir.
{
"aps": {
"alert": {
"title": "Yeni mesaj",
"body": "3 oxunmamış söhbətiniz var"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
thread-id açarı iOS Bildiriş Mərkəzində bildirişləri qruplara birləşdirir. category açarı aksiya düymələrini göstərmək üçün bildirişi UNNotificationCategory ilə əlaqələndirir. Bu açarlar olmadan bütün bildirişlər ayrıca göstərilir.
Məcburi aps lüğəti ilə yanaşı, APNS yükü yuxarı səviyyədə istənilən fərqli sahələri ehtiva edə bilər. Bu sahələr bildiriş emal edilərkən tətbiqə userInfo lüğəti vasitəsilə əlçatan olur. Fərqli məlumatlar varlıq identifikatorlarını, ekranları və ya keçidləri ötürmək üçün əlverişlidir. Yükün maksimum ölçüsü 4 KB-dır, ona görə push vasitəsilə böyük həcmli məlumatları ötürməkdən çəkinin; onları bildiriş açıldıqdan sonra API vasitəsilə yükləyin.
Push bildirişi göndərmək üçün serverdə düzgün doğrulama başlıqları ilə APNS endpointinə POST sorğusu etmək lazımdır. Aşağıda Token-based doğrulama ilə Node.js nümunəsi verilmişdir.
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: "Salam!", 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 uğurlu göndərildi")
}
})
Göndərmədən sonra APNS uğur çatdırmada HTTP status 200 və ya cavab gövdəsində təsviri olan xəta kodu qaytarır. token-unregistered (410) xətasını emal etmək vacibdir — belə bir token serverdən silinməlidir, çünki tətbiq cihazdan silinib.
APNS hər göndərmə sorğusu üçün HTTP statusları qaytarır. Uğurlu göndərmə — status 200. Xətalar müxtəlif emal strategiyaları tələb edir. BadDeviceToken (400) və ya Unregistered (410) — cihaz tokeni köhnəlib, serverdən silinməlidir. PayloadTooLarge (413) — 4 KB limiti keçilib, yükü qısaldın.
TooManyRequests (429) xətası — sorğu limiti keçilib. APNS saniyədə göndərilən sorğuların sayına kvota təyin edir. 429 qəbul edildikdə eksponensial gecikmə (exponential backoff) tətbiq edilməli və göndərmə təkrarlanmalıdır. Bir HTTP/2 əlaqəsi üçün saniyədə 100 sorğudan çox olmamaq tövsiyə olunur.
APNS tərəfindən xətalar — 500 və 503 (Internal Server Error / Service Unavailable). Bunlar Apple infrastrukturunun müvəqqəti nasazlıqlarıdır. Belə hallarda 1–5 saniyə gecikmə ilə, 3 cəhddən çox olmamaq şərtilə göndərməni təkrarlayın. Tam işləyən serverdə daimi 5xx xətaları nadir haldır və adətən TLS əlaqə problemləri ilə bağlıdır.
Production mühiti üçün token, xəta kodu və vaxtı göstərən bütün APNS xətalarının qeydiyyatını tətbiq etmək məcburidir. Bu, sertifikatlar, limitlər və ya xüsusi cihaz tokenləri ilə bağlı problemləri tez müəyyən etməyə kömək edir. Certificate-based doğrulama istifadə edirsinizsə, sertifikatların müddətini mütəmadi yoxlayın.
Tez-tez verilən suallar
APNS HTTP/2 API üçün TCP 443 (HTTPS) vasitəsilə işləyir. Əvvəllər ikilik protokol üçün 2195 və 2196 portları istifadə olunurdu. 2020-ci ilin iyun ayından Apple 443 portunda yalnız HTTP/2 istifadəsini tələb edir. Serverin api.push.apple.com ünvanına çıxışı olduğundan əmin olun.
Sandbox — push bildirişlərinin sazlanması üçün APNS test mühiti. Production — real istifadəçilər üçün iş mühiti. Token-based doğrulama ilə bir açar hər iki mühit üçün işləyir — endpoint fərqlidir: api.sandbox.push.apple.com və ya api.push.apple.com.
Push token aşağıdakı hallarda dəyişə bilər: tətbiqin ehtiyyat nüsxəsindən bərpası, tətbiqin yenidən qurulması, əməliyyat sisteminin yenilənməsi, şəbəkə parametrlərinin sıfırlanması. Token dəyişmir App Store vasitəsilə adi tətbiq yeniləmələrində. Server BadDeviceToken (400) xətasını tokenin silinməsi üçün siqnal kimi emal etməlidir.
Adi alert/background bildirişləri üçün 4 KB (4096 bayt). PushKit vasitəsilə VOIP üçün — 5 KB (5120 bayt). Ölçünün aşılması PayloadTooLarge (413) xətasını qaytarır. Yükü minimal saxlamaq və əlavə məlumatları server vasitəsilə yükləmək tövsiyə olunur.
APNS internet əlaqəsi olmayan cihaza bildiriş göndərə bilməz. Cihaz oflayndırsa, APNS hər tətbiq üçün son mesajı 28 günə qədər saxlayır. ƏlaQə bərpa olunduqda mesaj dərhal çatdırılır. Köhnə mesajlar saxlanmır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun