PushKit एप्ल द्वारा push सूचनाओं की गारंटीड तुरंत डेलीवरी के लिए एक framework है, जो मुख्य रूप से VoIP एप्लिकेशन्स के लिए डिजाइन किया गया है। मानक APNs (Apple Push Notification service) के विपरीत, जो विलम्बित या समूहीकृत हो सकती हैं, PushKit डिवाइस और एप्ल के सर्वर्स के बीच एक स्थायी TCP कनेक्शन का उपयोग करता है। Apple Developer Documentation, 2026 के अनुसार, PushKit 500 मिलीसेकंड से कम एंड-टू-एंड डेलीवरी विलंब प्रदान करता है, जो रियल-टाइम एप्लिकेशन्स — वॉयस और वीडियो कॉल के लिए महत्वपूर्ण है।
मुख्य बातें
PushKit एप्ल द्वारा iOS 8 में पेश किया गया एक framework है जो APNs सर्वर्स के साथ एक स्थायी कनेक्शन के माध्यम से गारंटीड प्राथमिकता के साथ push सूचना डेलीवरी तंत्र प्रदान करता है। सामान्य सूचनाओं के विपरीत जो एक ही APNs चैनल से गुजरती हैं और विलम्बित हो सकती हैं, PushKit सूचनाएँ उच्च प्राथमिकता के साथ एक समर्पित धारा का उपयोग करती हैं, जो लगभग रियल-टाइम डेलीवरी सुनिश्चित करती है।
तकनीकी रूप से, PushKit डिवाइस और एप्ल के push सर्वर्स के बीच एक स्थायी TCP कनेक्शन के माध्यम से काम करता है। जब कोई सर्वर VoIP सूचना भेजता है, तो कनेक्शन इसे तुरंत डिवाइस पर पहुँचाता है, जो एप्लिकेशन को जागृत करता है और PKPushRegistry डेलीगेट को कॉल करता है। एप्लिकेशन का सक्रिय स्थिति में होना आवश्यक नहीं है — PushKit इसे बैकग्रउंड, समाप्त अवस्था, या डिवाइस रिबूट के बाद भी जागृत कर सकता है।
Microsoft Research (2024) द्वारा मोबाइल प्लेटफॉर्मों पर push सूचना विलंब पर किए गए अध्ययन के अनुसार, PushKit सूचनाओं का माध्यिक विलंब 120–350 ms है, जबकि मानक APNs सूचनाओं का माध्यिक 1–5 सेकंड है। यह मूलभूत अंतर समर्पित TCP चैनल और एप्ल की ओर से प्राथमिकता प्रसंस्करण द्वारा समझाया गया है।
PushKit चार प्रकारों का समर्थन करता है: VoIP (कॉल के लिए), Complication (घड़ी के डायल डेटा के लिए), FileProvider (फ़ाइल सिंक्रोनाइज़ेशन के लिए), और PushToTalk (वॉकी-टॉकी कार्यों के लिए)। iOS 13 से, केवल VoIP प्रकार तीसरे पक्ष डीव्लपर्स के लिए व्यापक रूप से उपलब्ध है। Complication और FileProvider के विशिष्ट अनुप्रयोग हैं और एप्ल के स्वयं के इकोसिस्टम तक सीमित हैं।
| PushKit प्रकार | उद्देश्य | उपलब्धता |
|---|---|---|
| VoIP | आने वाली वॉयस और वीडियो कॉल संकेत | iOS 8+, App Store |
| Complication | Apple Watch फ़ेस पर डेटा अपडेट करना | watchOS 6+ |
| FileProvider | File Provider Extension में नई फ़ाइलों का संकेत | iOS 11+, सीमित |
| PushToTalk | उद्यम अनुप्रयोगों में वॉकी-टॉकी फ़ंक्शन | iOS 16+, सीमित पहुँच |
APNs (Apple Push Notification service) एक सार्वभौमिक push सूचना डेलीवरी सेवा है जो सभी एप्लिकेशन्स के लिए एक ही चैनल के माध्यम से संचालित होती है। जब चैनल भी80ड़ा होता है तो एप्ल APNs सूचनाओं को बउफर कर सकता है, समूहीकृत कर सकता है, या छोड़ भी सकता है। दूसरी ओर, PushKit प्रत्येक सूचना प्रकार के लिए एक समर्पित कनेक्शन का उपयोग करता है, और एप्ल बिना बउफरिंग के प्रत्येक VoIP push की डेलीवरी की गारंटी देता है।
यह अंतर समय-महत्वपूर्ण परिदृश्यों में स्पष्ट होता है: APNs के माध्यम से पहुँचाई गई एक आने वाली कॉल 10–30 सेकंड के विलंब से आ सकती है या यदि डिवाइस पावर-सेविंग मोड में है तो बिल्कुल नहीं आ सकती। PushKit डिवाइस की स्थिति की परवाह किए बिना 100–500 ms में वही सूचना पहुँचाता है, क्योंकि इसका TCP चैनल सिस्टम द्वारा प्राथमिकता के साथ सक्रिय रखा जाता है।
| पैरामीटर | PushKit | APNs |
|---|---|---|
| कनेक्शन प्रकार | स्थायी TCP (समर्पित चैनल) | बउफरिंग के साथ साझा चैनल |
| माध्यिक विलंब | 120–350 ms | 1–5 सेकंड |
| एप्लिकेशन वेक-अप | हमेशा, किसी भी अवस्था से | केवल अगर एप्लिकेशन बंद न हो |
| Payload आकार | 5 KB तक | 4 KB तक |
| iOS समूहीकरण | नहीं | हाँ |
PushKit आर्किटेक्चर PKPushRegistry के चारों ओर बना है — एक ऐसा ऑब्जेक्ट जो एक विशिष्ट प्रकार की सूचनाएँ प्राप्त करने के लिए एप्लिकेशन को पंजीकृत करता है। एप्लिकेशन एक PKPushRegistry इंस्टेंस बनाता है, वांछित प्रकार (जैसे, PKPushTypeVoIP) निर्दिष्ट करता है, और एक डेलीगेट नियुक्त करता है। पंजीकरण के बाद, सिस्टम स्वचालित रूप से APNs के साथ कनेक्शन बनाए रखता है और डेलीगेट के माध्यम से push सूचनाएँ पहुँचाता है।
प्रत्येक सूचना एक PKPushPayload ऑब्जेक्ट द्वारा प्रदर्शित की जाती है, जिसमें सर्वर डेटा के साथ एक dictionaryPayload होता है। पेलोड का आकार 5 KB तक सीमित है, जो कॉल मेटाडेटा को प्रेषित करने के लिए पर्याप्त है: कॉलर पहचानकर्ता, कॉल प्रकार (ऑडियो/वीडियो), संपर्क नाम, और सत्र टोकन। मीडिया स्ट्रीम अलग से WebRTC या किसी अन्य रियल-टाइम प्रोटोकॉल के माध्यम से प्रेषित की जाती है।
import PushKit
class PushKitManager: NSObject {
private let pushRegistry = PKPushRegistry(queue: .main)
func configure() {
pushRegistry.delegate = self
pushRegistry.desiredPushTypes = [.voIP]
}
}
PushKit सूचना प्राप्त होने पर डेलीगेट विधि को कॉल करता है। इस बिंदु पर, एप्लिकेशन को dictionaryPayload से डेटा निकालना चाहिए और तुरंत CallKit के माध्यम से कॉल प्रदर्शित करनी चाहिए, अन्यथा सिस्टम बैकग्रउंड कार्य को समाप्त कर सकता है। एप्ल 30 सेकंड के भीतर प्रसंस्करण पूरा करने की सिफारिश करता है, लेकिन VoIP कॉल के लिए पहले सेकंड के भीतर कॉल स्क्रीन दिखाना महत्वपूर्ण है।
extension PushKitManager: PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType
) {
guard let caller =
payload.dictionaryPayload["caller"] as? String
else { return }
CallKitManager.shared.reportIncomingCall(
uuid: UUID(),
handle: caller
)
}
}
iOS 13 के रिलीज के साथ, एप्ल ने PushKit के उपयोग पर सथीर प्रतिबंध लगाए। डीव्लपर बैकग्रउंड एप्लिकेशन अपडेट के लिए VoIP push का व्यापक रूप से एक गुप्त तंत्र के रूप में उपयोग कर रहे थे — PushKit के माध्यम से जागृति सामग्री लोड करने, डेटा सिंक्रोनाइज़ करने और उपभोक्ता की स्पष्ट अनुमति के बिना इंटरफ़ेस अपडेट करने की अनुमति देती थी। एप्ल ने इसे ऊर्जा-बचत अवधारणा का उल्लंघन माना और PushKit को केवल आने वाली कॉल संकेत तक सीमित कर दिया।
अब प्रत्येक PushKit सूचना को CallKit के माध्यम से एक आने वाली कॉल प्रदर्शित करनी होगी। यदि सिस्टम पता लगाता है कि PushKit का उपयोग अन्य उद्देश्यों के लिए किया जा रहा है — उदाहरण के लिए, कॉल प्रदर्शित किए बिना बैकग्रउंड सिंक्रोनाइज़ेशन या सामग्री अपडेट — तो एप्लिकेशन को समीक्षा के दौरान अस्वीकृत किया जा सकता है या PushKit सेवा से असमर्थ किया जा सकता है। एप्ल ने iOS 13 से शुरू करके बैकग्रउंड डेटा अपडेट के लिए PushKit का उपयोग करने की क्षमता को भी हटा दिया।
पूर्ण PushKit एकीकरण में पंजीकरण, push टोकन प्राप्त करना, और आने वाली सूचनाओं को संभालना शामिल है। PushKit सूचनाएँ भेजने की अनुमति स्वचालित रूप से माँगता है — PushKit के लिए एक अतिरिक्त UNUserNotificationCenter कॉल की आवश्यकता नहीं है, लेकिन एप्लिकेशन की स्थानीय सूचनाओं के लिए इसकी आवश्यकता हो सकती है। पंजीकरण के बाद, सिस्टम push टोकन पहुँचाने के लिए pushRegistry:didUpdatePushCredentials को कॉल करता है, जिसे सर्वर को भेजना होता है।
extension PushKitManager: PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didUpdate pushCredentials: PKPushCredentials,
for type: PKPushType
) {
let token = pushCredentials.token
.map { String(format: "%02x", $0) }
.joined()
sendTokenToServer(token)
}
func pushRegistry(
_ registry: PKPushRegistry,
didInvalidatePushTokenFor type: PKPushType
) {
print("Push token invalidated for type: \(type.rawValue)")
}
}
सर्वर सिदे APNs के माध्यम से push-type = voip और हेडर apns-push-type: voip के साथ एक PushKit सूचना भेजता है। सामान्य APNs के विपरीत, VoIP push अपने स्वयं का प्रमाणपत्र का उपयोग करता है और topic कान्फ़िगरेशन की आवश्यकता नहीं होती। पेलोड में कॉल पहचान के लिए न्यूनतम डेटा होना चाहिए।
// VoIP push पेलोड उदाहरण
{
"aps": {
"alert": {}
},
"caller": "+15551234567",
"callerName": "Alice Johnson",
"sessionId": "abc-123-def",
"hasVideo": false
}
PushKit की डिबगिंग मानक APNs से अधिक जटिल है क्योंकि PushKit iOS सिमुलेटर पर काम नहीं करता है। निदान के लिए एक भौतिक iPhone या iPad की आवश्यकता होती है। सही संचालन का पहला संकेत है लॉन्च पर pushRegistry:didUpdatePushCredentials का कॉल और एक विशिष्ट फ़ॉरमेट (VoIP के लिए 64 hex अक्षर) में push टोकन का दिखना। यदि डेलीगेट कॉल नहीं होता है, तो अपने एप्लिकेशन के entitlement की जाँच करें।
एक और सामान्य समस्या एप्लिकेशन अपडेट के बाद PushKit द्वारा सूचनाएँ नहीं पहुँचाना है। ऐसा तब होता है जब push टोकन बदल गया हो लेकिन सर्वर पुराने का उपयोग जारी रखता है। हल है एप्लिकेशन लॉन्च पर नया टोकन सर्वर को भेजना और pushRegistry:didInvalidatePushTokenForType कॉल होने पर अमान्य टोकन हटाना। एप्ल सामान्य APNs के माध्यम से एक फ़ॉलबैक तंत्र लागू करने की भी सिफारिश करता है।
| समस्या | कारण | समाधान |
|---|---|---|
| didUpdatePushCredentials कॉल नहीं होता | गलत entitlements या गलत प्रकार | Xcode में Capabilities → Push Notifications + VoIP की जाँच करें |
| push विलम्ब से आता है | डिवाइस लॉ पावर मोड में या कमजोर सिग्नल | PushKit हार्डवेयर सीमाओं को दर्कनाश नहीं कर सकता |
| रिस्टार्ट के बाद सूचनाएँ नहीं आतीं | एप्लिकेशन पुनर्स्थापन के बाद push टोकन बदल गया | नया टोकन अनुरोध करें और सर्वर पर अपडेट करें |
| PushKit के कारण App Store ने अस्वीकृत किया | PushKit का उपयोग कॉल के अलावा अन्य उद्देश्यों के लिए किया गया | सुनिश्चित करें कि प्रत्येक push reportNewIncomingCall में परिणमित हो |
अक्सर पूछे जाने वाले प्रश्न
तकनीकी रूप से हाँ, लेकिन यह बेकार होगा। iOS 13 से, PushKit का एकमात्र अनुमत उपयोग आने वाली कॉल संकेत है, जिसे प्रदर्शित करने के लिए CallKit की आवश्यकता होती है। CallKit के बिना PushKit का उपयोग करने पर एप्लिकेशन को App Store से अस्वीकृत किया जा सकता है।
PushKit के लिए अधिकतम पेलोड आकार 5 KB (5120 बाइट) है। यह सामान्य APNs सूचनाओं से 1 KB अधिक है, जो कॉल के अधिक मेटाडेटा को प्रेषित करने की अनुमति देता है।
एप्ल जब एप्लिकेशन हटाया जाता है तो स्वचालित रूप से push टोकन को अमान्य कर देता है। सर्वर को अमान्यकरण की सूचना प्राप्त होगी और उसे उस टोकन पर push भेजना बंद करना चाहिए। एक अमान्य टोकन पर push भेजने का प्रयास APNs त्रुटि 410 में परिणमित होगा।
PushKit macOS 10.14+ पर Mac Catalyst या AppKit का उपयोग करके बनाए गए Mac एप्लिकेशन्स के लिए उपलब्ध है। कार्यक्षमता iOS संस्करण के पूरी तरह समान है, जिसमें VoIP सूचना समर्थन शामिल है।
अपने स्वयं के एनलिटिक्स का उपयोग करें: सर्वर से push भेजने और क्लाइंट पर didReceiveIncomingPushWithPayload कॉल के बीच के समय को ट्रेक करें। 500 ms से कम का औसत समय PushKit के सही संचालन को इंगित करता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें