PushKit — ما هو، إطار عمل إشعارات VoIP لنظام iOS

المؤلف: IT Sectr نُشر: 2026-03-22 وقت القراءة: 8 دق

PushKit هو إطار عمل iOS لتوصيل إشعارات VoIP بزمن وصول منخفض، متجاوزًا APNs القياسي. وفقًا لـ Apple Developer Documentation (2025)، يضمن PushKit توصيل المكالمات في غضون 5 ثوانٍ حتى في الخلفية. تتم معالجة إشعارات VoIP مباشرة، دون الحاجة إلى عرض لافتة للمستخدم، مما يجعل الإطار الأداة الرئيسية لتطبيقات المراسلة والاتصال المرئي على iOS.

الملامح الرئيسية

  • PushKit هو إطار عمل iOS لتوصيل إشعارات VoIP بأولوية وزمن وصول منخفض.
  • الإشعارات تتم معالجتها دون عرض لافتة — يستيقظ التطبيق في الخلفية لمعالجة المكالمة.
  • التسجيل يتم عبر PKPushRegistry مع نوع pushType .voIP.
  • الفرق عن APNs — PushKit لا يستخدم قناة الإشعارات القياسية وله أولوية أعلى.
  • القيود — PushKit مصمم فقط لـ VoIP ولا يمكن استخدامه للإشعارات العادية.

ما هو PushKit

PushKit هو إطار عمل من Apple، تم تقديمه في iOS 8، والذي يوفر توصيل إشعارات push بزمن وصول منخفض لتطبيقات VoIP. على عكس APNs القياسي (Apple Push Notification service)، يسمح PushKit للتطبيق بالاستيقاظ في الخلفية عند استلام مكالمة واردة، دون عرض إشعار للمستخدم. هذا أمر بالغ الأهمية لتطبيقات الصوت والفيديو — يتلقى المستخدم المكالمة فورًا، حتى إذا كان التطبيق مغلقًا. وفقًا لـ Apple WWDC 2024، يعالج PushKit أكثر من 2 مليار إشعار VoIP يوميًا حول العالم.

كيف يعمل PushKit

آلية العمل مبنية على اتصال مباشر بين الجهاز وخادم push الخاص بـ Apple، متجاوزًا قناة الإشعارات القياسية. عندما يرسل خادم التطبيق إشعار VoIP، فإنه يمر عبر خادم PushKit مخصص ويتم توصيله إلى الجهاز بأولوية قصوى. يقوم النظام بإيقاظ التطبيق في الخلفية واستدعاء طريقة المفوض pushRegistry:didReceiveIncomingPushWithPayload:forType:. يستقبل التطبيق الحمولة (payload)، ويعالج المكالمة، ويستدعي معالج الإكمال للتأكيد. تستغرق الدورة بأكملها من الإرسال إلى المعالجة ما لا يزيد عن 5 ثوانٍ، وفقًا لمواصفات Apple.

PushKit مقابل APNs

الفرق الرئيسي بين PushKit و APNs يكمن في آلية التوصيل والمعالجة. يستخدم APNs قناة الإشعارات القياسية مع عرض لافتة أو صوت أو شارة، بينما يوصل PushKit البيانات مباشرة إلى التطبيق دون إشعار مرئي. فيما يلي جدول مقارنة للخصائص الرئيسية.

الخاصيةPushKitAPNs
أولوية التوصيلعالية (توصيل فوري)متوسطة (تأخير محتمل)
إيقاظ التطبيقنعم، في الخلفيةفقط عند النقر على الإشعار
عرض اللافتةلانعم (اختياري)
الاستخدامVoIP، مكالمات، اتصال مرئيجميع أنواع الإشعارات
الحمولةJSON فقط، بدون وسائطJSON + مرفقات

PushKit أيضًا لا يدعم المرفقات الوسائطية الغنية ولا يمكن استخدامه للإشعارات التسويقية العادية. تتحكم Apple بصرامة في استخدام PushKit — يجب أن يحتوي التطبيق على وظائف VoIP صريحة، وإلا سيتم رفضه أثناء المراجعة. يبقى APNs الحل العام لجميع السيناريوهات الأخرى.

التسجيل واستقبال إشعارات VoIP

لاستخدام PushKit، يجب على التطبيق التسجيل عبر PKPushRegistry مع نوع pushType .voIP. يتم التسجيل مرة واحدة عند التشغيل الأول، وبعد ذلك يقوم النظام بإنشاء رمز push فريد وتمريره عبر المفوض. يتم إرسال هذا الرمز إلى خادم التطبيق للإرسال اللاحق لإشعارات VoIP. فيما يلي مثال على تسجيل PushKit والحصول على الرمز في Swift.

إعداد تسجيل PushKit

swift
import PushKit

let registry = PKPushRegistry(queue: DispatchQueue.main)
registry.delegate = self
registry.desiredPushTypes = [.voIP]

// MARK: - PKPushRegistryDelegate
func pushRegistry(
    _ registry: PKPushRegistry,
    didUpdate pushCredentials: PKPushCredentials,
    for type: PKPushType
) {
    let deviceToken = pushCredentials.token
        .map { String.format("%02x", $0) }
        .joined()
    sendVoIPTokenToServer(deviceToken)
}

بعد استدعاء desiredPushTypes مع PKPushType.voIP، يطلب النظام تلقائيًا الإذن لتلقي إشعارات VoIP. في طريقة pushRegistry:didUpdatePushCredentials:forType:، يتلقى التطبيق رمز الجهاز كـ Data، والذي يتم تحويله إلى سلسلة سداسية عشرية وإرساله إلى الخادم. الرمز فريد لكل جهاز ويتغير عند إعادة تثبيت التطبيق — يجب على الخادم معالجة تحديثات الرمز.

استقبال إشعار وارد

swift
func pushRegistry(
    _ registry: PKPushRegistry,
    didReceiveIncomingPushWith payload: PKPushPayload,
    for type: PKPushType,
    completion: @escaping VoidBlock
) {
    guard let caller = payload.dictionaryPayload["caller"] as? String else {
        completion()
        return
    }

    let update = CXCallUpdate()
    update.remoteHandle = CXHandle(type: .generic, value: caller)

    provider.reportNewIncomingCall(
        with: UUID(),
        update: update,
        completion: { error in
            if let error = error {
                print("Call error: \(error)")
            }
            completion()
        }
    )
}

في طريقة didReceiveIncomingPushWith، يتلقى التطبيق الحمولة مع بيانات المكالمة. بعد استخراج معلومات المتصل، يتم إنشاء CXCallUpdate من إطار عمل CallKit لعرض شاشة المكالمة الواردة. من المهم استدعاء معالج الإكمال بعد المعالجة — وإلا قد يقوم النظام بإنهاء عملية التطبيق قسريًا بسبب انتهاء المهلة. الحد الأقصى لوقت المعالجة هو 30 ثانية، وبعدها يعتبر iOS الإشعار غير معالج.

معالجة المكالمات الواردة مع CallKit

PushKit متكامل بشكل وثيق مع CallKit — إطار عمل لعرض واجهة المكالمات النظامية على iOS. عندما يتلقى التطبيق إشعار VoIP عبر PushKit، يجب عليه إنشاء CXProvider و CXCallController لإدارة المكالمة. يعرض CallKit تلقائيًا شاشة المكالمة الواردة على شاشة القفل، حتى إذا كان التطبيق مصغرًا. فيما يلي مثال على إعداد مزود CallKit.

swift
let config = CXProviderConfiguration(localizedName: "MyApp")
config.supportsVideo = true
config.maximumCallGroups = 1
config.maximumCallsPerCallGroup = 1
config.supportedHandleTypes = [.phoneNumber, .generic]

let provider = CXProvider(configuration: config)
provider.setDelegate(self, queue: nil)

CXProviderConfiguration يحدد مظهر وسلوك شاشة المكالمة — اسم التطبيق، دعم الفيديو، عدد المكالمات المتزامنة. دمج PushKit مع CallKit إلزامي لتطبيقات VoIP: بدونه، لن يعرض النظام شاشة المكالمة الواردة، وسيفوت المستخدم المكالمة. تطلب Apple استخدام CallKit لجميع التطبيقات التي تستخدم PushKit.

الميزات والقيود

استخدام PushKit يفرض عددًا من القيود الصارمة التي وضعتها Apple. يمكن استخدام الإطار فقط لوظائف VoIP — أي محاولة لإرسال إشعارات تسويقية عبر PushKit ستؤدي إلى حظر التطبيق. يجب ألا يتجاوز حجم الحمولة 4 كيلوبايت، ويمكن أن تحتوي فقط على بيانات JSON بدون مرفقات. بدءًا من iOS 13، فرضت Apple حدًا على تكرار إرسال إشعارات VoIP — لا يزيد عن إشعار واحد في الدقيقة لكل جهاز. يجب على الخادم الامتثال لهذا الحد، وإلا سيتم رفض الإشعارات من قبل النظام. PushKit أيضًا لا يعمل على محاكي iOS — الاختبار ممكن فقط على جهاز فعلي.

هيكل حمولة PushKit

حمولة إشعار VoIP هي قاموس JSON مع بيانات مكالمة مخصصة. على عكس APNs، لا يدعم PushKit الحقول القياسية alert و badge و sound — يتم تعريف جميع البيانات من قبل المطور. يتضمن الهيكل النموذجي معرف المتصل (caller)، نوع المكالمة (صوت أو فيديو)، معرف الغرفة أو الجلسة وطابع زمني. يجب أن يكون حجم كل حقل ضئيلًا لتوفير المساحة ضمن حد 4 كيلوبايت. توصي Apple بتضمين فقط البيانات اللازمة لعرض شاشة المكالمة الواردة على شاشة القفل في الحمولة، وتحميل باقي المعلومات (الصورة الرمزية، سجل المحادثة) بعد أن يرد المستخدم عبر طلب شبكة منفصل. مثال على حمولة دنيا: { "caller": "آنا", "caller_id": "+79161234567", "type": "audio", "room": "uuid-room-1234", "ts": 1718534400 }. يجب أن تكون جميع المفاتيح في الحمولة قصيرة، لا لبس فيها، وموثقة على جانب الخادم للتوافق بين إصدارات التطبيق.

معالجة الأخطاء وإعادة المحاولة

عند العمل مع PushKit، من الضروري معالجة فشل التوصيل وفقدان الاتصال. إذا كان الجهاز غير متصل بالإنترنت أو مفصولاً عن الشبكة، فلن يتم توصيل إشعار VoIP — PushKit لا يدعم التخزين وإعادة الإرسال، على عكس APNs التي تخزن الإشعارات لمدة تصل إلى 24 ساعة لإعادة المحاولة. يجب على الخادم تتبع الإشعارات غير المسلمة بشكل مستقل وإعادة المحاولة عند استعادة الاتصال. يتم استخدام آلية push kit feedback service لهذا الغرض — حيث يعيد قائمة بالإشعارات غير المسلمة مع سبب الفشل. يوصى بإعداد مراقبة نجاح توصيل إشعارات VoIP من خلال تحليلات الخادم وإخطار المطور إذا انخفض معدل التوصيل الناجح عن 95%. يضمن نظام PushKit التوصيل فقط عندما يكون الجهاز متصلاً بالإنترنت بنشاط — في حالة absence، يتم فقدان الإشعار بشكل دائم، وهو أمر بالغ الأهمية عند تصميم نظام موثوق لمكالمات VoIP مع توصيل مضمون.

الأسئلة الشائعة

ما هو PushKit؟

PushKit هو إطار عمل من Apple لتوصيل إشعارات VoIP بزمن وصول منخفض يسمح للتطبيق بالاستيقاظ في الخلفية عند مكالمة واردة دون عرض لافتة. يُستخدم في تطبيقات المراسلة والاتصال المرئي.

ما الفرق بين PushKit و APNs؟

PushKit لديه أولوية توصيل أعلى ويوقظ التطبيق في الخلفية دون عرض إشعار للمستخدم. APNs يوصل الإشعارات مع لافتة ولا يمكنه إيقاظ التطبيق لمعالجة مكالمة دون تفاعل المستخدم.

هل من الضروري استخدام CallKit مع PushKit؟

نعم، تطلب Apple دمج PushKit مع CallKit لعرض شاشة المكالمة الواردة للنظام. بدون CallKit، لا يمكن للتطبيق عرض المكالمة الواردة على شاشة القفل، مما يجعل وظيفة VoIP عديمة الفائدة.

كيفية الحصول على رمز PushKit؟

يتم الحصول على الرمز بعد إنشاء PKPushRegistry بالنوع .voIP وتنفيذ طريقة المفوض pushRegistry:didUpdatePushCredentials:forType:. يتم تمرير الرمز كـ Data ويجب تحويله إلى سلسلة سداسية عشرية لإرسالها إلى الخادم.

ما هي حدود حجم الحمولة في PushKit؟

الحد الأقصى لحجم الحمولة لـ PushKit هو 4 كيلوبايت. يجب أن تكون البيانات بتنسيق JSON. المرفقات الوسائطية غير مدعومة. منذ iOS 13، هناك حد لا يزيد عن إشعار VoIP واحد في الدقيقة لكل جهاز.

الخلاصة

  • PushKit هو إطار عمل iOS لتوصيل إشعارات VoIP بزمن وصول منخفض، متجاوزًا APNs.
  • أولوية توصيل PushKit أعلى من APNs — يصل الإشعار في غضون 5 ثوانٍ.
  • التطبيق يستيقظ في الخلفية عند استلام الإشعار، دون عرض لافتة للمستخدم.
  • التسجيل يتم عبر PKPushRegistry مع PKPushType.voIP وبروتوكول PKPushRegistryDelegate.
  • CallKit إلزامي لعرض شاشة المكالمة الواردة للنظام على iOS.
  • الحمولة محدودة بـ 4 كيلوبايت، JSON فقط، لا يزيد عن إشعار واحد في الدقيقة منذ iOS 13.
  • توصية — استخدم PushKit فقط لوظائف VoIP، للإشعارات الأخرى استخدم APNs.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا