APNS (Apple Push Notification Service) Apple का बुनियादी ढाँचा सेवा है जो इकोसिस्टम डिवाइसों — iPhone, iPad, Mac, Apple Watch और Apple TV — पर push नोटिफिकेशन पहुँचाने के लिए है। यह सेवा डिवाइस और Apple सर्वर के बीच स्थायी TLS कनेक्शन के माध्यम से विश्वसनीय संदेश वितरण सुनिश्चित करती है। Apple Developer Documentation के अनुसार, APNS एप्लिकेशन सर्वर के साथ द्विदिश संचार के लिए HTTP/2 प्रोटोकॉल का उपयोग करता है।
मुख्य बिंदु
Apple Push Notification Service (APNS) Apple की मालिकाना सेवा है जो एप्लिकेशन सर्वर से उपयोगकर्ता डिवाइसों तक push नोटिफिकेशन रूट करती है। FCM के विपरीत, APNS Android या अन्य प्लेटफ़ॉर्म का समर्थन नहीं करता — यह पूरी तरह से Apple इकोसिस्टम से जुड़ा है।
सेवा एक स्थायी TLS कनेक्शन के माध्यम से काम करती है जो प्रत्येक Apple डिवाइस स्टार्टअप पर APNS सर्वर के साथ स्थापित करता है। यह कनेक्शन बैकग्राउंड में बनाए रखा जाता है और न्यूनतम विलंबता के साथ नोटिफिकेशन देने के लिए उपयोग किया जाता है।
APNS सभी वितरण बुनियादी ढाँचे को संभालता है: एन्क्रिप्शन, प्रमाणीकरण, प्राथमिकता निर्धारण, और डिवाइस के अनुपलब्ध होने पर पुनर्प्रेषण। डेवलपर को केवल सही ढंग से स्वरूपित पेलोड और एक वैध push टोकन प्रदान करने की आवश्यकता है।
मूल रूप से, APNS पोर्ट 2195–2196 पर बाइनरी प्रोटोकॉल के माध्यम से काम करता था। 2015 से, Apple ने सेवा को आधुनिक HTTP/2 प्रोटोकॉल में स्थानांतरित कर दिया है, जो मल्टीप्लेक्सिंग, हेडर कम्प्रेशन और सर्वर push नोटिफिकेशन का समर्थन करता है। HTTP/2 जून 2020 से अनिवार्य हो गया।
APNS के माध्यम से push नोटिफिकेशन वितरण प्रक्रिया में पाँच चरण होते हैं: डिवाइस पंजीकरण, push टोकन प्राप्त करना, सर्वर द्वारा अनुरोध भेजना, APNS रूटिंग, और डिवाइस पर वितरण।
यदि डिवाइस अनुपलब्ध है (बंद है या कोई नेटवर्क नहीं), APNS प्रत्येक ऐप के लिए नवीनतम संदेश संग्रहीत करता है और कनेक्शन बहाल होने पर उसे वितरित करता है। अधिकतम भंडारण अवधि 4 सप्ताह है, जिसके बाद संदेश हटा दिया जाता है।
Apple push नोटिफिकेशन भेजते समय एप्लिकेशन सर्वर को प्रमाणित करने के दो तरीके सपोर्ट करता है। प्रत्येक तरीके की वैधता अवधि, प्रबंधन और उपयोग में आसानी के मामले में अपनी विशेषताएँ हैं।
| पैरामीटर | Token-आधारित (p8) | Certificate-आधारित (.p12) |
|---|---|---|
| वैधता | अनिश्चितकालीन (कुंजी समाप्त नहीं होती) | प्रमाणपत्र वैधता तक सीमित (आमतौर पर 1 वर्ष) |
| रोटेशन | आवश्यक नहीं जब तक कुंजी से समझौता न हो | अनिवार्य वार्षिक प्रतिस्थापन |
| मल्टी-ऐप | खाते के सभी ऐप के लिए एक कुंजी | प्रत्येक ऐप के लिए अलग प्रमाणपत्र |
| पर्यावरण | Sandbox और Production के लिए एक कुंजी | Sandbox और Production के लिए अलग प्रमाणपत्र |
Token-आधारित प्रमाणीकरण 2019 से Apple द्वारा अनुशंसित तरीका है। आप Apple Developer Console में एक p8 कुंजी बनाते हैं, इसे अपने सर्वर पर अपलोड करते हैं, और इसके साथ प्रत्येक APNS अनुरोध पर हस्ताक्षर करते हैं। कुंजी कभी समाप्त नहीं होती और आपके खाते के सभी ऐप के लिए काम करती है।
नई परियोजनाओं के लिए, Token-आधारित प्रमाणीकरण स्पष्ट रूप से बेहतर है: पूरे खाते के लिए एक p8 कुंजी, अनिश्चितकालीन, पर्यावरण से बंधन के बिना। Certificate-आधारित (.p12) अभी भी पुरानी परियोजनाओं में उपयोग किया जाता है लेकिन इसमें वार्षिक प्रतिस्थापन और Sandbox और Production के लिए अलग प्रमाणपत्र की आवश्यकता होती है। CI/CD की योजना बनाते समय प्रमाणपत्र समाप्ति पर विचार करें।
APNS तीन प्रकार के push नोटिफिकेशन सपोर्ट करता है, जो डिवाइस पर उनके व्यवहार और अनुरोध विशेषता आवश्यकताओं में भिन्न होते हैं। प्रकार का चुनाव UX परिदृश्य और संदेश की तात्कालिकता पर निर्भर करता है।
Background नोटिफिकेशन के लिए, आपको content-available: 1 कुंजी निर्दिष्ट करनी होगी और प्राथमिकता 5 (ऊर्जा-कुशल वितरण) सेट करनी होगी। यदि ऐप समय पर उन्हें प्रोसेस नहीं करता है तो सिस्टम बैकग्राउंड नोटिफिकेशन की संख्या को सीमित कर सकता है।
APNS दो प्राथमिकता मान सपोर्ट करता है: 10 (तत्काल वितरण) और 5 (ऊर्जा-कुशल)। Alert नोटिफिकेशन के लिए 10 का उपयोग करें — उपयोगकर्ता को उन्हें तुरंत प्राप्त करना चाहिए। बैकग्राउंड नोटिफिकेशन के लिए 5 का उपयोग करें — सिस्टम बैटरी बचाने के लिए वितरण में देरी कर सकता है। बैकग्राउंड के लिए गलत प्राथमिकता APNS अस्वीकृति का कारण बन सकती है।
APNS सामान्य नोटिफिकेशन के लिए अधिकतम 4 KB और VOIP के लिए 5 KB आकार के साथ JSON प्रारूप में पेलोड स्वीकार करता है। पेलोड में प्रदर्शन सेटिंग्स के साथ अनिवार्य aps शब्दकोश और वैकल्पिक कस्टम फ़ील्ड होते हैं।
{
"aps": {
"alert": {
"title": "नया संदेश",
"body": "आपके 3 अपठित चैट हैं"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
thread-id कुंजी iOS सूचना केंद्र में नोटिफिकेशन को समूहित करती है। category कुंजी क्रिया बटन प्रदर्शित करने के लिए नोटिफिकेशन को UNNotificationCategory से जोड़ती है। इन कुंजियों के बिना, सभी नोटिफिकेशन अलग-अलग दिखाई देते हैं।
अनिवार्य aps शब्दकोश के अलावा, APNS पेलोड में शीर्ष स्तर पर कोई भी कस्टम फ़ील्ड हो सकते हैं। ये फ़ील्ड नोटिफिकेशन प्रोसेस करते समय userInfo शब्दकोश के माध्यम से ऐप के लिए सुलभ हैं। कस्टम डेटा इकाई पहचानकर्ता, स्क्रीन या लिंक पास करने के लिए सुविधाजनक है। अधिकतम पेलोड आकार 4 KB है, इसलिए push के माध्यम से बड़ी मात्रा में डेटा स्थानांतरित करने से बचें; नोटिफिकेशन खोलने के बाद API के माध्यम से लोड करें।
सर्वर से push नोटिफिकेशन भेजने के लिए, आपको सही प्रमाणीकरण हेडर के साथ APNS एंडपॉइंट पर POST अनुरोध निष्पादित करना होगा। नीचे Token-आधारित प्रमाणीकरण का उपयोग करते हुए Node.js में एक उदाहरण दिया गया है।
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: "नमस्ते!", body: "परीक्षण 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 सफलतापूर्वक भेजा गया")
}
})
भेजने के बाद, APNS सफल वितरण पर HTTP स्थिति 200 या प्रतिक्रिया निकाय में विवरण के साथ त्रुटि कोड लौटाता है। token-unregistered (410) त्रुटियों को संभालना महत्वपूर्ण है — ऐसे टोकन को सर्वर से हटा दिया जाना चाहिए, क्योंकि ऐप डिवाइस से हटा दिया गया है।
APNS प्रत्येक भेजने के अनुरोध के लिए HTTP स्थिति कोड लौटाता है। सफल वितरण स्थिति 200 लौटाता है। त्रुटियों के लिए अलग-अलग प्रबंधन रणनीतियों की आवश्यकता होती है। BadDeviceToken (400) या Unregistered (410) — डिवाइस टोकन पुराना हो गया है और इसे सर्वर से हटा दिया जाना चाहिए। PayloadTooLarge (413) — 4 KB की सीमा पार हो गई है, पेलोड कम करें।
TooManyRequests (429) — अनुरोध सीमा पार हो गई। APNS प्रति सेकंड भेजने की संख्या पर कोटा निर्धारित करता है। 429 प्राप्त करने पर, एक्सपोनेंशियल बैकऑफ़ लागू करें और पुनः प्रयास करें। प्रति HTTP/2 कनेक्शन प्रति सेकंड 100 अनुरोधों से अधिक न करने की अनुशंसा की जाती है।
APNS-पक्ष त्रुटियाँ — 500 और 503 (आंतरिक सर्वर त्रुटि / सेवा अनुपलब्ध)। ये Apple के बुनियादी ढाँचे की अस्थायी विफलताएँ हैं। ऐसे मामलों में, 1-5 सेकंड की देरी के साथ पुनः प्रयास करें, 3 से अधिक प्रयास न करें। पूरी तरह से काम करने वाले सर्वर के साथ लगातार 5xx त्रुटियाँ दुर्लभ हैं और आमतौर पर TLS कनेक्शन समस्याओं से संबंधित होती हैं।
Production वातावरण के लिए, टोकन, त्रुटि कोड और समय के साथ सभी APNS त्रुटियों की लॉगिंग लागू करना सुनिश्चित करें। इससे प्रमाणपत्र, कोटा या विशिष्ट डिवाइस टोकन के साथ समस्याओं की तुरंत पहचान करने में मदद मिलेगी। यदि Certificate-आधारित प्रमाणीकरण का उपयोग कर रहे हैं तो नियमित रूप से प्रमाणपत्र समाप्ति तिथियों की जाँच करें।
अक्सर पूछे जाने वाले प्रश्न
APNS HTTP/2 API के लिए TCP 443 (HTTPS) के माध्यम से काम करता है। पहले, बाइनरी प्रोटोकॉल के लिए पोर्ट 2195 और 2196 का उपयोग किया जाता था। जून 2020 से, Apple को पोर्ट 443 पर विशेष रूप से HTTP/2 के उपयोग की आवश्यकता है। सुनिश्चित करें कि आपके सर्वर की api.push.apple.com तक पहुँच है।
Sandbox push नोटिफिकेशन डिबगिंग के लिए APNS परीक्षण वातावरण है। Production वास्तविक उपयोगकर्ताओं के लिए लाइव वातावरण है। Token-आधारित प्रमाणीकरण के साथ, एक कुंजी दोनों वातावरणों के लिए काम करती है — एंडपॉइंट अलग होता है: api.sandbox.push.apple.com या api.push.apple.com।
Push टोकन बदल सकता है जब: ऐप बैकअप से पुनर्स्थापित किया जाता है, ऐप पुनः इंस्टॉल किया जाता है, OS अपडेट किया जाता है, नेटवर्क सेटिंग्स रीसेट की जाती हैं। टोकन नहीं बदलता App Store के माध्यम से नियमित ऐप अपडेट के दौरान। सर्वर को BadDeviceToken (400) त्रुटि को टोकन हटाने के संकेत के रूप में संभालना चाहिए।
सामान्य alert/background नोटिफिकेशन के लिए 4 KB (4096 बाइट्स)। PushKit के माध्यम से VOIP नोटिफिकेशन के लिए — 5 KB (5120 बाइट्स)। आकार से अधिक होने पर PayloadTooLarge (413) त्रुटि वापस आती है। पेलोड को न्यूनतम रखने और अतिरिक्त डेटा सर्वर के माध्यम से लोड करने की अनुशंसा की जाती है।
APNS इंटरनेट कनेक्शन के बिना डिवाइस पर नोटिफिकेशन नहीं पहुँचा सकता। यदि डिवाइस ऑफ़लाइन है, APNS 28 दिनों तक नवीनतम संदेश (प्रति ऐप प्रति डिवाइस) संग्रहीत करता है। कनेक्शन बहाल होने पर, संदेश तुरंत वितरित किया जाता है। पुराने संदेश संरक्षित नहीं होते।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें