# תעודת push של Apple: ‏.p8 או .p12 עם Expo

> להתראות push, Apple מציעה מפתח ‎.p8 בלי תפוגה שמתאים לכל האפליקציות שלך, או תעודת ‎.p12 שנתית. עם Expo, ה-EAS מנהל את המפתח.

עמוד מקורי: [תעודת push של Apple: ‏.p8 או .p12 עם Expo](https://devoria.fr/he/blog/apple-push-certificate-p8-p12-expo)
כותב: [Mehdi Azizi](https://devoria.fr/he/mehdi-azizi)
פרסום: 2026-11-04
עדכון תוכן אחרון: 2026-11-04


תעודת ה-push של Apple מאשרת לשרת לשלוח התראות לאפליקציה שלך דרך APNs, שירות ההתראות של Apple. היא קיימת בשתי צורות: תעודת ‎.p12, שתקפה לשנה וקשורה לאפליקציה אחת בלבד, או מפתח ‎.p8, שלא פג תוקף ומשמש את כל האפליקציות בחשבון שלך. **עם Expo אתה לא צריך את התעודה: EAS מציע לך ליצור מפתח ‎.p8 ב-build הראשון, ושירות ה-push של Expo משתמש בו בשבילך.**

המדריך על [תעודת המפתח וה-provisioning profile](https://devoria.fr/he/blog/ios-certificate-provisioning-profile-expo) מזכיר את מפתח ה-push בכמה שורות. כאן נלך עד הסוף: הבחירה בין שני הפורמטים, סביבות ה-sandbox וה-production, החידוש, והתקלות שמשתיקות את ההתראות ב-TestFlight.

אני מפרסם את האפליקציות שלי עם Expo ו-EAS. ב-Solys וב-TradaZen הפלאגין `expo-notifications` מוצהר בקונפיגורציה: הוא זה שמכין את האפליקציה לקבל התראות.

## למה Apple דורשת תעודה או מפתח

התראת push יוצאת משרת, שלך או של Expo, שמעביר אותה ל-APNs, שמוסר אותה לאייפון. לכן APNs צריך לוודא שלשרת הזה מותר לכתוב לאפליקציה שלך. Apple מציעה שתי דרכים להוכיח את זה.

- **חיבור מבוסס טוקן, עם מפתח ‎.p8.** [לפי Apple](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns), הוא מהיר יותר, אפשר להשתמש בו מכמה שרתים, ומפתח אחד מכסה את כל האפליקציות של הצוות שלך או חלק מהן. השרת שלך חותם איתו על טוקן, שצריך לחדש לפחות פעם בשעה.
- **חיבור מבוסס תעודה, עם קובץ ‎.p12.** [Apple מבהירה](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) שהתעודה הזו קשורה לאפליקציה אחת בלבד ותקפה לשנה. כמה אפליקציות, כמה תעודות.

[הדף של Apple על תפוגות](https://developer.apple.com/support/expiration/) מזכיר: מפתח החתימה של טוקני APNs אף פעם לא פג.

## הטבלה ‎.p8 / ‎.p12

| קריטריון      | מפתח ‎.p8           | תעודת ‎.p12              |
| ------------- | ------------------- | ------------------------ |
| תוקף          | בלי תפוגה           | שנה                      |
| היקף          | כל האפליקציות שלך   | אפליקציה אחת             |
| סביבה         | נבחרת ביצירה        | Sandbox ו-production     |
| חידוש         | אין, חוץ מביטול     | כל שנה                   |
| הורדה         | פעם אחת בלבד        | ייצוא מה-Mac             |
| כמות          | שניים לכל סביבה     | אחת לכל אפליקציה         |
| שימוש עם Expo | נוצר ומנוהל ע"י EAS | לא מופיעה בתיעוד של Expo |

שלוש הבהרות. את קובץ ה-‎.p8 [אפשר להוריד רק פעם אחת](https://developer.apple.com/help/account/keys/create-a-private-key): Apple לא שומרת אותו בחשבון שלך. את ה-‎.p12, לעומת זאת, [מייצאים מה-Keychain של ה-Mac](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate) שיצר את התעודה. והמגבלה של שני מפתחות לכל סביבה חלה על מפתחות צוות. למפתחות שמוגבלים לאפליקציות מסוימות, Apple מאפשרת עד 200 לכל סביבה.

[הדף של Expo על credentials](https://docs.expo.dev/app-signing/app-credentials/) מדבר רק על מפתח ה-push, וסופר מקסימום שניים לחשבון, בלי להבחין בין סביבות או מפתחות לפי אפליקציה. **לאפליקציית Expo, מפתח ‎.p8 הוא הבחירה הנכונה.**

## Sandbox ו-production: שתי סביבות

ל-APNs יש שני שרתים: development, שנקרא גם sandbox, ו-production. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) שומרת את הראשון לבדיקות ואת השני לאפליקציות שפורסמו. האפליקציה יודעת באיזה להשתמש בזכות ה-entitlement ‏`aps-environment`. [לפי Apple](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment), הערך שלו נקבע לפי פרופיל החתימה: `development` עם פרופיל פיתוח, `production` עם פרופיל הפצה ול-TestFlight.

**כלומר build של TestFlight מדבר עם production, בדיוק כמו ה-App Store.**

בצד של Expo, שני פרטים. [התיעוד של expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) מציין שה-entitlement תמיד נכתב כ-`development` בפרויקט, ואז עובר ל-`production` בארכיון של build מסוג release. ובזמן היצירה, הטוקן של Expo משויך לסביבה של האפליקציה, שמזוהה אוטומטית: אין לך מה לבחור בזמן השליחה.

אם אתה יוצר את המפתח בעצמך, Apple שואלת אותך על הסביבה וההיקף שלו: כל הצוות או אפליקציות מסוימות. התיעוד שלה למפתחים מתאר היום מפתחות צוות שמוגבלים ל-sandbox או ל-production, כשהמפתחות הישנים שתקפים בכל מקום עדיין מתקבלים. [העזרה של החשבון](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens), לעומת זאת, עדיין טוענת שהמפתח משמש את שתי הסביבות. Apple סותרת את עצמה: תזכור את הסביבה שבחרת ביצירה. **מפתח שמוגבל ל-sandbox לא יעבוד לא ב-TestFlight ולא ב-App Store.**

## איך Expo מנהל את מפתח ה-push

לפי [מדריך ההגדרה של Expo](https://docs.expo.dev/push-notifications/push-notifications-setup/), שעודכן ב-28 ביולי 2026, ה-build הראשון שלך לפיתוח מציע להגדיר התראות push ולייצר מפתח APNs. תענה כן לשניהם. בלי EAS Build, תריץ `eas credentials`. צריך חשבון Apple Developer בתשלום.

אחר כך:

- **EAS שומר את המפתח ומשייך אותו לאפליקציה שלך.** לפי Expo, מפתח אחד משמש כמה אפליקציות שתרצה, והעלאה של מפתח חדש לא משנה את טוקני ה-Expo Push של המשתמשים שלך.
- **השרת שלך לא פונה ל-APNs.** הוא שולח לשירות ה-push של Expo, שמעביר ל-APNs. [Expo מבקש ממך לקרוא את הקבלות (receipts)](https://docs.expo.dev/push-notifications/sending-notifications/) בערך 15 דקות אחרי השליחה: שם מופיעות השגיאות.
- **הפלאגין מוסיף את ה-entitlement.** תצהיר על `expo-notifications` ב-`plugins`:

```json
{
  "expo": {
    "plugins": ["expo-notifications"]
  }
}
```

שתי מלכודות. [ה-FAQ של Expo](https://docs.expo.dev/push-notifications/faq/) אומר ש-Expo Go כבר לא תומך בהתראות push מאז SDK 53, בעוד שהדף של expo-notifications מתייחס רק ל-Android. בשני המקרים Expo ממליץ על build לפיתוח: תבדוק איתו. ומחיקה של המפתח עם `eas credentials` מסירה אותו מהשרתים של Expo, לא מחשבון ה-Apple שלך. כדי לפנות מקום, תבטל אותו בפורטל של Apple. כמו כל סוד, קובץ ה-‎.p8 אסור שיגיע ל-repo שלך: הכלל זהה לזה של [מפתחות API באפליקציית Expo](https://devoria.fr/he/blog/secret-api-key-expo-app-what-to-protect).

## חידוש: מה באמת פג

**למפתח ‎.p8 אין מה לחדש.** הוא מפסיק לעבוד רק אם אתה מבטל אותו. אם אתה חושד שהוא נחשף, [Apple ממליצה](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) ליצור מפתח חדש, לעבור אליו, ורק אז לבטל את הישן. כדי להחליף את המפתח עם Expo, ה-FAQ נותן את השלבים: `eas credentials`, ‏iOS, פרופיל ה-build שלך, ואז הסרה של מפתח ה-push ויצירה של חדש.

**תעודת ‎.p12 פגה כל שנה.** Apple מבקשת לעדכן אותה לפני המועד ולעקוב אחרי התאריך שלה ב-Keychain. ברגע שהיא פגה או בוטלה, [אתה כבר לא יכול לשלוח התראות](https://developer.apple.com/help/account/certificates/certificates-overview) לאפליקציה שלך. Apple לא מתארת תהליך חידוש נפרד: אתה יוצר תעודה חדשה מה-identifier של האפליקציה, מתקין אותה בשרת שלך לפני המועד, ואז מסיר את הישנה. **החידוש הכי טוב הוא לעבור למפתח.**

> אתה מנהל אייפונים עם Intune או כלי אחר לניהול מכשירים? זו לא אותה תעודה. תעודת ה-push לניהול מכשירים נוצרת ב-Apple Push Certificates Portal ומתחדשת כל שנה. [Apple ממליצה](https://support.apple.com/guide/deployment/dep2de55389a) לרשום איזה חשבון Apple שימש ליצירה: תצטרך אותו לחידוש.

## התקלות הנפוצות ואיך מתקנים

### עובד בפיתוח, לא ב-TestFlight

1. **אתה שולח לטוקן הלא נכון.** ה-build של TestFlight נרשם ב-production ומקבל טוקן חדש. טוקן מה-build לפיתוח לא יעבוד: Apple מחזירה `BadDeviceToken` כש[הטוקן לא תואם לסביבה](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). תשלוף את הטוקן מאפליקציית ה-TestFlight עצמה.
2. **לאפליקציית ה-production אין credentials ל-push.** זה האבחון של ה-FAQ של Expo. תבדוק את דף ה-credentials של הפרויקט ב-expo.dev, או `eas credentials`.
3. **המפתח שלך מוגבל ל-sandbox.** תחליף אותו במפתח שתקף ל-production.
4. **האייפון לא מקבל טוקן.** אם התקנת את ה-build של TestFlight מעל build של Xcode, Expo מציע להפעיל מחדש את המכשיר.

### "No valid aps-environment entitlement string found"

לפי ה-FAQ של Expo, השגיאה הזו אומרת שלא מוגדר מפתח push לפרויקט ה-iOS שלך. תבדוק את דף ה-credentials, ואז תריץ build מחדש: EAS יציע לך לייצר את המפתח. תוודא גם ש-`expo-notifications` באמת מופיע ב-`plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple שולחת את המייל הזה אחרי ההעלאה: נראה שהאפליקציה שלך נרשמת ל-APNs, אבל החתימה שלה לא כוללת את ה-entitlement ‏`aps-environment`. [ההערה של Expo על SDK 51](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) מסבירה את זה. מאז ה-SDK הזה, ה-entitlement נוסף רק אם `expo-notifications` מותקן. האזהרה נובעת משתי בדיקות של Apple. הראשונה משווה את ה-capabilities של ה-App ID שלך ל-entitlements של האפליקציה. השנייה מזהה בבינארי מתודה של הרשמה להתראות, שהקוד של Expo מכיל בכל האפליקציות.

**זו אזהרה, לא דחייה**, מבהיר Expo. אם אתה משתמש בהתראות, תוסיף את הפלאגין ותעשה build מחדש: [EAS מסנכרן את ה-capabilities](https://docs.expo.dev/build-reference/ios-capabilities/) של ה-App ID בכל build. אחרת, תסיר את ה-capability ‏Push Notifications מה-identifier שלך בפורטל של Apple. האזהרה עלולה להמשיך להופיע, בלי השלכות.

### InvalidCredentials או כל האפליקציות שותקות בבת אחת

`InvalidCredentials` בקבלה אומר שה-credentials של ה-push שלך כבר לא תקפים, הרבה פעמים כי המפתח בוטל. כל האפליקציות שהשתמשו בו משתתקות באותו רגע. התיקון של Expo: `eas credentials`, ואז מפתח חדש. אם הקבלה מזכירה `InvalidProviderToken`, ‏Expo ממליץ לעשות build מחדש עם יצירה מחדש של מפתח ה-push והפרופיל.

## לפני שמפעילים התראות

כדי לבדוק התראות באייפון שלך לפני ההשקה, תעקוב אחרי [TestFlight לבדיקת האפליקציה שלך](https://devoria.fr/he/blog/testflight-test-iphone-app-before-submission). אם אתה שולח התראות שקטות כדי להעיר את האפליקציה, תקרא שוב את [guideline 2.5.4 על מצבי רקע](https://devoria.fr/he/blog/guideline-2-5-4-background-mode-rejected). כל השרשרת, בלי Mac, נמצאת ב[פרסום אפליקציית iOS בלי Mac](https://devoria.fr/he/blog/publish-ios-app-without-mac-expo-eas), ושלבי ההשקה בדף [פרסום אפליקציה ב-App Store](https://devoria.fr/he/expertise/publish-an-app-on-the-app-store).

לפני השליחה הראשונה שלך, תעשה את ה[אבחון החינמי](https://devoria.fr/he/diagnostic): הוא אומר לך מה תקוע בפרויקט שלך ושולח לך את הצ'קליסט שלי נגד דחיות של Apple. כדי לבנות את האפליקציה, לחבר מנויים ולפרסם אותה, ה-[iOS & Android Kit](https://devoria.fr/he/kits/ios) מלווה את המסלול בארבעה שלבים עם קוד ההתחלה של האפליקציות שלי, בקצב שלך.

## שאלות נפוצות

### האם תעודת ה-push של Apple פגה?

תעודת ‎.p12 פגה אחרי שנה, וההתראות שלך מפסיקות אם לא מחליפים אותה. מפתח ‎.p8 אף פעם לא פג: הוא מפסיק לעבוד רק אם אתה מבטל אותו. זו הסיבה העיקרית להעדיף את המפתח.

### צריך תעודת push לכל אפליקציה?

עם תעודת ‎.p12, כן: כל תעודה קשורה לאפליקציה אחת בלבד. מפתח ‎.p8 משמש את כל האפליקציות בחשבון שלך. אז עם Expo, מפתח אחד יכול לכסות את כל הקטלוג שלך.

### איך מחדשים תעודת push של Apple?

תיצור תעודה חדשה מה-identifier של האפליקציה, עם בקשת חתימה חדשה, תתקין אותה בשרת שלך, ואז תסיר את הישנה. תעשה את זה לפני המועד. הכי פשוט זה לעבור למפתח ‎.p8, שלא צריך חידוש.

### איבדתי את קובץ ה-‎.p8, מה עושים?

Apple מאפשרת להוריד אותו רק פעם אחת. אם EAS יצר את המפתח, Expo שומר אותו וההתראות שלך ממשיכות לעבוד. אחרת, תיצור מפתח חדש, תוסיף אותו עם `eas credentials`, ואז תבטל את הישן בפורטל של Apple. טוקני ה-Expo Push של המשתמשים שלך לא משתנים.

### צריך לעשות build מחדש אחרי החלפת מפתח push?

בדרך כלל לא. המפתח משמש את השרת ששולח, לא את האפליקציה המותקנת, ו-Expo מציין שמפתח חדש לא משנה את הטוקנים. חריג: אם הקבלות מדווחות על `InvalidProviderToken`, ‏Expo ממליץ לעשות build מחדש עם מפתח חדש ופרופיל חדש.


## הפרויקט שלך

[Review Kit](https://devoria.fr/he/kits/app-review): הצ'קליסט שלי לבדיקת App Store, הדחיות שקיבלתי מ-Apple ואיך תיקנתי אותן, הצ'קליסט ל-Google Play ושלושה skills ל-Claude Code. ‏169 ‏⁦₪⁩.

[iOS & Android Kit](https://devoria.fr/he/kits/ios): תבנה אפליקציה לאייפון ולאנדרואיד עם Claude Code: קוד ההתחלה של האפליקציות שלי, כל הדרך עד החנויות וכל הקיטים. ‏349 ‏⁦₪⁩.

[אבחון: מה מפריד בינך לבין אפליקציית האייפון שלך](https://devoria.fr/he/diagnostic): 7 שאלות, 60 שניות: תדע מה באמת חוסם אותך מלפרסם את אפליקציית האייפון שלך, תקבל מסלול ב-4 שלבים ואת הקיט שמתאים לך.
