شهادة إشعارات Apple: .p8 أم .p12 مع Expo
بقلم Mehdi Azizi
نُشر في ، 8 د
لإشعاراتك تقدّم Apple مفتاح .p8 لا تنتهي صلاحيته ويصلح لكل تطبيقاتك، أو شهادة .p12 سنوية. مع Expo تتولى EAS إدارة المفتاح.
شهادة الإشعارات من Apple تسمح لخادم بإرسال الإشعارات إلى تطبيقك عبر APNs، خدمة الإشعارات لدى Apple. وهي تأتي بشكلين: شهادة .p12 صالحة لسنة ومرتبطة بتطبيق واحد، أو مفتاح .p8 لا تنتهي صلاحيته ويخدم كل تطبيقات حسابك. مع Expo لا تحتاج إلى الشهادة: تعرض عليك EAS إنشاء مفتاح .p8 في أول build، وخدمة الإشعارات في Expo تستخدمه نيابةً عنك.
الدليل الخاص بـشهادة المطوّر والـ provisioning profile يذكر مفتاح الإشعارات في بضعة أسطر. هنا نذهب إلى النهاية: الاختيار بين الصيغتين، وبيئتا sandbox والإنتاج، والتجديد، والأعطال التي توقف الإشعارات في TestFlight.
أنشر تطبيقاتي باستخدام Expo وEAS. يعلن Solys وTradaZen عن الإضافة expo-notifications في إعداداتهما: هي التي تُهيّئ التطبيق لاستقبال الإشعارات.
لماذا تطلب Apple شهادة أو مفتاحًا
ينطلق الإشعار من خادم، خادمك أو خادم Expo، فيسلّمه إلى APNs، وAPNs يوصله إلى الـ iPhone. لذلك يجب على APNs أن يتحقق من أن هذا الخادم يحق له مراسلة تطبيقك. وتقدّم Apple طريقتين لإثبات ذلك.
- الاتصال بالرمز (token)، بمفتاح .p8. بحسب Apple هو أسرع، ويمكن استخدامه من عدة خوادم، والمفتاح الواحد يغطي كل تطبيقات فريقك أو جزءًا منها. يوقّع خادمك به رمزًا يجب تجديده مرة كل ساعة على الأقل.
- الاتصال بالشهادة، بملف .p12. توضح Apple أن هذه الشهادة مرتبطة بتطبيق واحد وصالحة لسنة. عدة تطبيقات تعني عدة شهادات.
وصفحة Apple عن انتهاء الصلاحيات تذكّر بذلك: مفتاح توقيع رموز APNs لا تنتهي صلاحيته أبدًا.
جدول .p8 / .p12
| المعيار | مفتاح .p8 | شهادة .p12 |
|---|---|---|
| المدة | بلا انتهاء صلاحية | سنة واحدة |
| النطاق | كل تطبيقاتك | تطبيق واحد |
| البيئة | تُختار عند الإنشاء | sandbox والإنتاج |
| التجديد | لا شيء، إلا عند الإلغاء | كل سنة |
| التنزيل | مرة واحدة فقط | تصدير من الـ Mac |
| العدد | اثنان لكل بيئة | واحدة لكل تطبيق |
| الاستخدام مع Expo | تنشئه EAS وتديره | غائبة عن توثيق Expo |
ثلاث ملاحظات. ملف .p8 لا يُنزَّل إلا مرة واحدة: Apple لا تحتفظ به في حسابك. أما .p12 فـيُصدَّر من سلسلة مفاتيح الـ Mac الذي أنشأ الشهادة. وحدّ المفتاحين لكل بيئة ينطبق على مفاتيح الفريق. أما المفاتيح المقصورة على تطبيقات معينة، فتسمح Apple بما يصل إلى 200 منها لكل بيئة.
صفحة Expo عن بيانات الاعتماد لا تتحدث إلا عن مفتاح الإشعارات، وتحدّ عدده باثنين لكل حساب كحد أقصى، دون تمييز بين البيئات ولا بين المفاتيح الخاصة بكل تطبيق. لتطبيق Expo، مفتاح .p8 هو الخيار الصحيح.
sandbox والإنتاج: بيئتان
لدى APNs خادمان: التطوير، ويسمى أيضًا sandbox، والإنتاج. تخصص Apple الأول للاختبارات والثاني للتطبيقات المنشورة. يعرف التطبيق أيهما يستخدم بفضل الـ entitlement aps-environment. بحسب Apple تتبع قيمته ملف التوقيع: development مع ملف تطوير، وproduction مع ملف توزيع ولـ TestFlight.
إذن build الخاص بـ TestFlight يتحدث مع الإنتاج، تمامًا مثل App Store.
من جهة Expo، تفصيلان. توثيق expo-notifications يذكر أن الـ entitlement يُكتب دائمًا بقيمة development في المشروع، ثم يتحول إلى production في أرشيف build الإصدار. وعند إنشاء رمز Expo، يُربط ببيئة التطبيق التي تُكتشف تلقائيًا: لا شيء تختاره عند الإرسال.
إذا أنشأت المفتاح بنفسك، تسألك Apple عن بيئته ونطاقه: الفريق كله أو تطبيقات معينة. توثيقها للمطورين يصف الآن مفاتيح فريق مقصورة على sandbox أو على الإنتاج، مع بقاء المفاتيح القديمة الصالحة في كل مكان مقبولة. أما مساعدة الحساب فما زالت تؤكد أن المفتاح يخدم البيئتين. Apple تناقض نفسها: اعتمد البيئة التي تختارها عند الإنشاء. المفتاح المخصص لـ sandbox لن يعمل لا مع TestFlight ولا مع App Store.
كيف يدير Expo مفتاح الإشعارات
بحسب دليل الإعداد في Expo، المحدَّث في 28 يوليو 2026، يعرض عليك أول build تطوير إعداد الإشعارات وتوليد مفتاح APNs. أجب بنعم في الحالتين. بدون EAS Build، شغّل eas credentials. تحتاج إلى حساب Apple Developer مدفوع.
بعد ذلك:
- تخزّن EAS المفتاح وتربطه بتطبيقك. بحسب Expo، المفتاح الواحد يخدم ما تشاء من التطبيقات، ورفع مفتاح جديد لا يغيّر رموز Expo Push لمستخدميك.
- خادمك لا يتصل بـ APNs. يرسل إلى خدمة الإشعارات في Expo، التي تنقل إلى APNs. يطلب منك Expo قراءة الإيصالات بعد نحو 15 دقيقة من الإرسال: هناك تظهر الأخطاء.
- الإضافة تضع الـ entitlement. أعلن عن
expo-notificationsفيplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
فخّان. الأسئلة الشائعة في Expo تقول إن Expo Go لم يعد يدعم الإشعارات منذ SDK 53، بينما صفحة expo-notifications لا تقصد إلا Android. في الحالتين ينصح Expo بـ build تطوير: اختبر به. وحذف المفتاح عبر eas credentials يزيله من خوادم Expo، لا من حسابك في Apple. لتحرير مكان، ألغِه في بوابة Apple. وكأي سرّ، ملف .p8 يجب ألا ينتهي أبدًا في مستودعك: القاعدة نفسها المطبقة على مفاتيح API في تطبيق Expo.
التجديد: ما الذي تنتهي صلاحيته فعلًا
مفتاح .p8 لا يحتاج إلى أي تجديد. لا يتوقف إلا إذا ألغيته. إذا ظننت أنه مخترق، تنصح Apple بإنشاء مفتاح جديد، والانتقال إليه، ثم بعد ذلك فقط إلغاء القديم. لاستبدال المفتاح مع Expo، تعطي الأسئلة الشائعة الخطوات: eas credentials، ثم iOS، ثم ملف الـ build الخاص بك، ثم إزالة مفتاح الإشعارات وتوليد مفتاح جديد.
شهادة .p12 تنتهي صلاحيتها كل سنة. تطلب Apple تحديثها قبل الموعد ومراقبة تاريخها في سلسلة المفاتيح. بمجرد انتهائها أو إلغائها، لا يمكنك إرسال إشعارات بعد الآن إلى تطبيقك. لا تصف Apple تجديدًا منفصلًا: تنشئ شهادة جديدة من معرّف التطبيق، وتثبّتها على خادمك قبل الموعد، ثم تزيل القديمة. أفضل تجديد يبقى الانتقال إلى المفتاح.
تدير أجهزة iPhone باستخدام Intune أو أداة أخرى لإدارة الأجهزة؟ هذه ليست الشهادة نفسها. شهادة الإشعارات الخاصة بإدارة الأجهزة تُنشأ على Apple Push Certificates Portal وتُجدَّد كل سنة. تنصح Apple بتدوين حساب Apple المستخدم: ستحتاجه عند التجديد.
الأعطال المعتادة وحلولها
يعمل في التطوير، لا في TestFlight
- ترسل إلى الرمز الخطأ. build الخاص بـ TestFlight يسجّل في الإنتاج ويحصل على رمز جديد. الرمز القادم من build التطوير لا يعمل: تردّ Apple بـ
BadDeviceTokenعندما لا يطابق الرمز البيئة. خذ الرمز من تطبيق TestFlight نفسه. - تطبيق الإنتاج ليس لديه بيانات اعتماد للإشعارات. هذا هو تشخيص الأسئلة الشائعة في Expo. تحقق من صفحة بيانات الاعتماد للمشروع على expo.dev، أو من
eas credentials. - مفتاحك مقصور على sandbox. استبدله بمفتاح صالح في الإنتاج.
- الـ iPhone لا يحصل على رمز. إذا ثبّت build الخاص بـ TestFlight فوق build من Xcode، يقترح Expo إعادة تشغيل الجهاز.
«No valid aps-environment entitlement string found»
بحسب الأسئلة الشائعة في Expo، يشير هذا الخطأ إلى أنه لا يوجد مفتاح إشعارات مُعدّ لمشروع iOS الخاص بك. تحقق من صفحة بيانات الاعتماد، ثم أعد تشغيل build: ستعرض عليك EAS حينها توليد المفتاح. وتأكد أيضًا من وجود expo-notifications فعلًا في plugins.
ITMS-90078 : Missing Push Notification Entitlement
ترسل Apple هذا البريد بعد الرفع: يبدو أن تطبيقك يسجّل في APNs، لكن توقيعه لا يحتوي على الـ entitlement aps-environment. ملاحظة Expo عن SDK 51 تشرح ذلك. منذ هذا الـ SDK، لا يُضاف الـ entitlement إلا إذا كانت expo-notifications مثبّتة. يأتي التحذير من فحصين لدى Apple. الأول يقارن قدرات معرّف تطبيقك بالـ entitlements الخاصة بالتطبيق. والثاني يرصد في الملف الثنائي دالة تسجيل في الإشعارات، يحتويها كود Expo في كل التطبيقات.
إنه تحذير، لا رفض، كما يوضح Expo. إذا كنت تستخدم الإشعارات، أضف الإضافة وأعد الـ build: تزامن EAS القدرات الخاصة بمعرّف التطبيق في كل build. وإلا، أزل القدرة Push Notifications من معرّفك في بوابة Apple. قد يستمر التحذير، دون أي عواقب.
InvalidCredentials أو كل التطبيقات صامتة فجأة
InvalidCredentials في إيصال تعني أن بيانات اعتماد الإشعارات لديك لم تعد صالحة، غالبًا لأن المفتاح أُلغي. كل التطبيقات التي كانت تستخدمه تصمت في الوقت نفسه. حل Expo: eas credentials، ثم مفتاح جديد. إذا ذكر الإيصال InvalidProviderToken، ينصح Expo بإعادة الـ build مع توليد مفتاح الإشعارات والملف من جديد.
قبل تفعيل الإشعارات
لاختبار الإشعارات على الـ iPhone الخاص بك قبل الإطلاق، اتبع TestFlight لاختبار تطبيقك. إذا كنت ترسل إشعارات صامتة لإيقاظ التطبيق، أعد قراءة الإرشاد 2.5.4 عن أوضاع الخلفية. السلسلة كاملة، بدون Mac، موجودة في نشر تطبيق iOS بدون Mac، وخطوات الإطلاق في صفحة نشر تطبيق على App Store.
قبل أول إرسال، أجرِ التشخيص المجاني: يخبرك بما يعيق مشروعك ويرسل إليك قائمة التحقق التي أستخدمها لتجنب رفض Apple. ولبناء التطبيق وربط الاشتراكات ونشره، يرافقك iOS & Android Kit في المسار على أربع مراحل مع كود البداية الخاص بتطبيقاتي، وفق إيقاعك.
الأسئلة الشائعة
هل تنتهي صلاحية شهادة إشعارات Apple؟
تنتهي صلاحية شهادة .p12 بعد سنة، وتتوقف إشعاراتك إذا لم تُستبدل. أما مفتاح .p8 فلا تنتهي صلاحيته أبدًا: لا يتوقف إلا إذا ألغيته. وهذا هو السبب الرئيسي لتفضيل المفتاح.
هل تحتاج إلى شهادة إشعارات لكل تطبيق؟
مع شهادة .p12، نعم: كل شهادة مرتبطة بتطبيق واحد. مفتاح .p8 يخدم كل تطبيقات حسابك. لذلك مع Expo، يمكن لمفتاح واحد أن يغطي كل تطبيقاتك.
كيف تجدد شهادة إشعارات Apple؟
أنشئ شهادة جديدة من معرّف تطبيقك، مع طلب توقيع جديد، وثبّتها على خادمك، ثم أزل القديمة. افعل ذلك قبل الموعد. والأسهل يبقى الانتقال إلى مفتاح .p8، الذي لا يحتاج إلى تجديد.
فقدت ملف .p8، ماذا أفعل؟
لا تسمح Apple بتنزيله إلا مرة واحدة. إذا كانت EAS هي التي أنشأت المفتاح، فإن Expo يحتفظ به وتستمر إشعاراتك. وإلا، أنشئ مفتاحًا جديدًا، وأضفه عبر eas credentials، ثم ألغِ القديم في بوابة Apple. رموز Expo Push لمستخدميك لا تتغير.
هل يجب إعادة الـ build بعد تغيير مفتاح الإشعارات؟
في العادة، لا. المفتاح يخدم الخادم الذي يرسل، لا التطبيق المثبّت، ويذكر Expo أن المفتاح الجديد لا يغيّر الرموز. الاستثناء: إذا أشارت الإيصالات إلى InvalidProviderToken، ينصح Expo بإعادة الـ build بمفتاح جديد وملف جديد.

