APNS: ما هو، كيفية عمل Apple Push Notification Service وبنيته

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

APNS (Apple Push Notification Service) هو خدمة البنية التحتية من Apple لتوصيل الإشعارات الفورية إلى أجهزة النظام البيئي: iPhone وiPad وMac وApple Watch وApple TV. تضمن الخدمة تسليمًا موثوقًا للرسائل عبر اتصال TLS دائم بين الجهاز وخوادم Apple. وفقًا لـ توثيق مطوري Apple، يستخدم APNS بروتوكول HTTP/2 للاتصال ثنائي الاتجاه مع خوادم التطبيقات.

النقاط الرئيسية

  • APNS — خدمة Apple المركزية لتوصيل الإشعارات الفورية إلى جميع أجهزة Apple
  • البروتوكول — HTTP/2 مع TLS، اتصال ثنائي الاتجاه بين خادم التطبيق وخوادم Apple
  • المصادقة — طريقتان:قائم على الرمز المميز (مفتاح p8) وقائم على الشهادة (.p12)
  • الأجهزة — كل جهاز يحصل على رمز push فريد للتعريف عند الإرسال
  • الأولوية — تسليم فوري (10) أو موفر للطاقة (5) حسب نوع الرسالة

ما هو APNS؟

Apple Push Notification Service (APNS) هي خدمة Apple الخاصة لتوجيه الإشعارات الفورية من خادم التطبيق إلى أجهزة المستخدمين. على عكس FCM، لا يدعم APNS Android أو المنصات الأخرى — فهو مرتبط بالكامل بالنظام البيئي لـ Apple.

تعمل الخدمة من خلال اتصال TLS دائم يقوم كل جهاز Apple بإنشائه مع خوادم APNS عند التشغيل. يتم الحفاظ على هذا الاتصال في الخلفية ويستخدم لتوصيل الإشعارات بأقل تأخير.

يتولى APNS جميع البنية التحتية للتسليم: التشفير، المصادقة، تحديد الأولويات، وإعادة الإرسال عندما يكون الجهاز غير متاح. يحتاج المطور فقط إلى توفير حمولة منسقة بشكل صحيح ورمز push صالح.

تطور APNS

في الأصل، كان APNS يعمل من خلال بروتوكول ثنائي على المنافذ 2195–2196. منذ عام 2015، قامت Apple بنقل الخدمة إلى بروتوكول HTTP/2 الحديث، الذي يدعم تعدد الإرسال وضغط الرؤوس وإشعارات push من الخادم. أصبح HTTP/2 إلزاميًا في يونيو 2020.

كيف يعمل Apple Push Notification Service؟

تتكون عملية توصيل الإشعارات الفورية عبر APNS من خمس مراحل: تسجيل الجهاز، الحصول على رمز push، إرسال الطلب من الخادم، توجيه APNS، والتسليم إلى الجهاز.

  • التسجيل — عند التشغيل، يستدعي التطبيق registerForRemoteNotifications، ويتصل النظام بـ APNS
  • الرمز المميز — يعيد APNS رمز push إلى الجهاز — سلسلة فريدة تحدد التطبيق على الجهاز
  • الإرسال — يرسل خادم التطبيق طلب POST إلى https://api.push.apple.com مع الرمز المميز والحمولة
  • التوجيه — يجد APNS الجهاز بواسطة الرمز المميز ويوصل الرسالة عبر اتصال TLS
  • المعالجة — يعرض iOS/macOS الإشعار أو يمرره إلى التطبيق حسب الحالة

إذا كان الجهاز غير متاح (مغلق أو لا توجد شبكة)، يخزن APNS أحدث رسالة لكل تطبيق ويوصلها عند استعادة الاتصال. المدة القصوى للتخزين هي 4 أسابيع، وبعدها يتم حذف الرسالة.

المصادقة في APNS: الرمز المميز والشهادة

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

المعاملقائم على الرمز المميز (p8)قائم على الشهادة (.p12)
الصلاحيةغير محدودة (المفتاح لا ينتهي)محدودة بصلاحية الشهادة (عادةً سنة واحدة)
التدويرغير مطلوب ما لم يتم اختراق المفتاحاستبدال سنوي إلزامي
تعدد التطبيقاتمفتاح واحد لجميع تطبيقات الحسابشهادة منفصلة لكل تطبيق
البيئةمفتاح واحد لـ Sandbox و Productionشهادات مختلفة لـ Sandbox و Production

المصادقة قائم على الرمز المميز هي الطريقة الموصى بها من Apple منذ 2019. تقوم بإنشاء مفتاح p8 واحد في Apple Developer Console، وتحميله على خادمك، وتوقيع كل طلب APNS به. المفتاح لا ينتهي أبدًا ويعمل لجميع تطبيقات حسابك.

أي طريقة مصادقة تختار

للمشاريع الجديدة، المصادقة قائم على الرمز المميز هي الأفضل بالتأكيد: مفتاح p8 واحد للحساب بالكامل، غير محدود، بدون ربط بالبيئة. الطريقةقائم على الشهادة (.p12) لا تزال مستخدمة في المشاريع القديمة لكنها تتطلب استبدالًا سنويًا وشهادات منفصلة لـ Sandbox و Production. ضع في اعتبارك انتهاء صلاحية الشهادة عند التخطيط لـ CI/CD.

أنواع الإشعارات الفورية في APNS

يدعم APNS ثلاثة أنواع من الإشعارات الفورية، تختلف في سلوكها على الجهاز ومتطلبات سمات الطلب. يعتمد اختيار النوع على سيناريو تجربة المستخدم وإلحاح الرسالة.

  • Alert — إشعار قياسي بعنوان ونص وأزرار إجراء اختيارية
  • Background — تسليم بيانات صامت (push صامت) دون عرض للمستخدم، يتم معالجته في application:didReceiveRemoteNotification
  • VOIP — نوع خاص لتطبيقات VoIP (PushKit)، يتم تسليمه فورًا حتى عند إغلاق التطبيق

للإشعارات Background، يجب عليك تحديد المفتاح content-available: 1 وتعيين الأولوية إلى 5 (تسليم موفر للطاقة). قد يحد النظام من عدد الإشعارات الخلفية إذا لم يعالجها التطبيق في الوقت المناسب.

تكوين أولوية التسليم

يدعم APNS قيمتين للأولوية: 10 (تسليم فوري) و 5 (موفر للطاقة). لإشعارات التنبيه، استخدم 10 — يجب أن يتلقاها المستخدم على الفور. للإشعارات الخلفية، استخدم 5 — قد يؤخر النظام التسليم لتوفير البطارية. الأولوية غير الصحيحة للخلفية قد تؤدي إلى رفض APNS.

تنسيق الحمولة في APNS

يقبل APNS الحمولة بتنسيق JSON بحجم أقصى 4 كيلوبايت للإشعارات العادية و5 كيلوبايت لـ VOIP. تحتوي الحمولة على قاموس aps الإلزامي مع إعدادات العرض وحقول مخصصة اختيارية.

json
{
    "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 لعرض أزرار الإجراء. بدون هذه المفاتيح، تظهر جميع الإشعارات بشكل فردي.

الحقول المخصصة في حمولة APNS

بالإضافة إلى قاموس aps الإلزامي، يمكن أن تحتوي حمولة APNS على أي حقول مخصصة في المستوى العلوي. هذه الحقول متاحة للتطبيق من خلال قاموس userInfo عند معالجة الإشعار. البيانات المخصصة مناسبة لتمرير معرفات الكيانات أو الشاشات أو الروابط. الحجم الأقصى للحمولة هو 4 كيلوبايت، لذا تجنب نقل كميات كبيرة من البيانات عبر push؛ قم بتحميلها عبر API بعد فتح الإشعار.

مثال على الإرسال عبر API HTTP/2

لإرسال إشعار push من الخادم، تحتاج إلى تنفيذ طلب POST إلى نقطة نهاية APNS مع رؤوس المصادقة الصحيحة. فيما يلي مثال في Node.js باستخدام المصادقةقائم على الرمز المميز.

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: "دفع اختباري" } }
})

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("تم إرسال الدفع بنجاح")
    }
})

بعد الإرسال، يعيد APNS حالة HTTP 200 عند التسليم الناجح أو رمز خطأ مع وصف في جسم الاستجابة. من المهم معالجة أخطاء token-unregistered (410) — يجب إزالة هذه الرموز من الخادم، حيث تم حذف التطبيق من الجهاز.

أخطاء APNS ومعالجتها

يعيد APNS رموز حالة HTTP لكل طلب إرسال. التسليم الناجح يعيد الحالة 200. تتطلب الأخطاء استراتيجيات معالجة مختلفة. BadDeviceToken (400) أو Unregistered (410) — رمز الجهاز قديم ويجب إزالته من الخادم. PayloadTooLarge (413) — تم تجاوز الحد 4 كيلوبايت، قلل الحمولة.

TooManyRequests (429) — تم تجاوز حد الطلبات. يحدد APNS حصة لعدد الإرساليات في الثانية. عند تلقي 429، قم بتطبيق التأخير الأسي (exponential backoff) وأعد المحاولة. يوصى بعدم تجاوز 100 طلب في الثانية لكل اتصال HTTP/2.

أخطاء جانب APNS — 500 و 503 (خطأ خادم داخلي / الخدمة غير متاحة). هذه أعطال مؤقتة في البنية التحتية لـ Apple. في هذه الحالات، أعد المحاولة بتأخير 1-5 ثوانٍ، لا يزيد عن 3 محاولات. الأخطاء المستمرة 5xx مع خادم يعمل بكامل طاقته نادرة وعادة ما تكون مرتبطة بمشاكل اتصال TLS.

لبيئات Production، تأكد من تنفيذ تسجيل جميع أخطاء APNS مع الرمز المميز ورمز الخطأ والوقت. سيساعد هذا في تحديد المشكلات بسرعة مع الشهادات أو الحصص أو رموز الأجهزة المحددة. تحقق بانتظام من تواريخ انتهاء صلاحية الشهادات إذا كنت تستخدم المصادقةقائم على الشهادة.

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

ما المنافذ التي يستخدمها APNS؟

يعمل APNS من خلال TCP 443 (HTTPS) لواجهة API HTTP/2. سابقًا، كانت تستخدم المنافذ 2195 و 2196 للبروتوكول الثنائي. منذ يونيو 2020، تطلب Apple استخدام HTTP/2 حصريًا على المنفذ 443. تأكد من أن خادمك لديه حق الوصول إلى api.push.apple.com.

ما هما بيئتا Sandbox و Production في APNS؟

Sandbox هي بيئة اختبار APNS لتصحيح أخطاء الإشعارات الفورية. Production هي البيئة الحقيقية للمستخدمين الفعليين. مع المصادقةقائم على الرمز المميز، يعمل مفتاح واحد لكلتا البيئتين — تختلف نقطة النهاية: api.sandbox.push.apple.com أو api.push.apple.com.

كم مرة يتغير رمز push للجهاز؟

يمكن أن يتغير رمز push عند: استعادة التطبيق من النسخة الاحتياطية، إعادة تثبيت التطبيق، تحديث نظام التشغيل، إعادة تعيين إعدادات الشبكة. الرمز لا يتغير أثناء التحديثات العادية للتطبيق عبر App Store. يجب على الخادم معالجة خطأ BadDeviceToken (400) كإشارة لإزالة الرمز.

ما هو الحجم الأقصى للحمولة في APNS؟

4 كيلوبايت (4096 بايت) للإشعارات العادية alert/background. لإشعارات VOIP عبر PushKit — 5 كيلوبايت (5120 بايت). تجاوز الحجم يعيد خطأ PayloadTooLarge (413). يوصى بالحفاظ على الحمولة صغيرة وتحميل البيانات الإضافية عبر الخادم.

هل يمكن إرسال push بدون إنترنت على الجهاز؟

APNS لا يمكنه توصيل إشعار إلى جهاز بدون اتصال بالإنترنت. إذا كان الجهاز غير متصل، يخزن APNS أحدث رسالة (لكل تطبيق لكل جهاز) لمدة تصل إلى 28 يومًا. عند استعادة الاتصال، يتم تسليم الرسالة فورًا. لا يتم الاحتفاظ بالرسائل الأقدم.

الملخص

  • APNS — خدمة البنية التحتية من Apple لتوصيل push إلى iOS وmacOS وwatchOS وtvOS
  • رمز push — معرف فريد للجهاز يتم الحصول عليه عبر registerForRemoteNotifications
  • HTTP/2 — بروتوكول APNS الحديث مع تعدد الإرسال، إلزامي منذ 2020
  • المصادقة —قائم على الرمز المميز (p8) أفضل منقائم على الشهادة (.p12) من حيث الصلاحية والمرونة
  • Alert, Background, VOIP — ثلاثة أنواع من الإشعارات الفورية بقواعد تسليم مختلفة
  • الحمولة — JSON حتى 4 كيلوبايت مع قاموس aps إلزامي وحقول مخصصة اختيارية
  • التخزين — يخزن APNS رسالة حديثة واحدة لمدة تصل إلى 28 يومًا للأجهزة غير المتصلة

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

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

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

اقرأ أيضًا