PushKit ایپل کا ایک فریم ورک ہے جو ضمانتی فوری ٹرانسمشن کے ساائل push اطلاعات پہونچانے کے لیے، بنیادی طور پر VoIP ایپلیکیشنز کے لیے ڈزائن کیا گیا ہے۔ معیاری APNs (Apple Push Notification service) کے برعکس، جو تاخیر یا گروپ کی جا سکتی ہیں، PushKit ڈیوائس اور ایپل کے سرورز کے درمیان ایک مستقل TCP کنیکشن استعمال کرتا ہے۔ Apple Developer Documentation, 2026 کے مطابق، PushKit 500 ملی سیک橁ڈ سے کم اینڈ-ٹو-اینڈ ٹرانسمشن لیٹنسی فراہم کرتا ہے، جو ریال ٹائم ایپلیکیشنز — وائس اور ویڈیو کالز — کے لیے انتہائی اہم ہے۔
اہم نکات
PushKit ایپل کا ایک فریم ورک ہے جو iOS 8 میں متعارف کرایا گیا، جو 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 اطلاعات کی خدمت ہے جو تمام ایپلیکیشنز کے لیے ایک سی چینل کے ذریعے کام کرتی ہے۔ جب چینل مصروف ہوتا ہے تو ایپل 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 ہوتا ہے۔ payload کا حجم 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 کونفگریشن کی ضرورت نہیں ہیں۔ Payload میں کال کی شناخت کے لیے حد ادنی ڈیٹا ہونا چاہیے۔
// VoIP push payload کی مثال
{
"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 ٹوکن کا ظاہر ہونا ہے۔ اگر ڈیلیگٹ کال نہیں ہوتا، تو اپنے ایپلیکیشن کے entitlements چیک کریں۔
ایک اور ام مسئلہ ایپلیکیشن اپ ڈیٹ کے بعد 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 کے لیے انتہائی payload حجم 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں