# Apple push certificate: .p8 ή .p12 με Expo

> Η Apple προσφέρει κλειδί .p8 χωρίς λήξη για όλες τις εφαρμογές σου ή ετήσιο πιστοποιητικό .p12. Με Expo, το EAS διαχειρίζεται το κλειδί.

Αρχική σελίδα: [Apple push certificate: .p8 ή .p12 με Expo](https://devoria.fr/el/blog/apple-push-certificate-p8-p12-expo)
Συγγραφέας: [Mehdi Azizi](https://devoria.fr/el/mehdi-azizi)
Δημοσίευση: 2026-11-04
Τελευταία αναθεώρηση περιεχομένου: 2026-11-04


Το push certificate της Apple επιτρέπει σε έναν server να στέλνει ειδοποιήσεις στην εφαρμογή σου μέσω του APNs, της υπηρεσίας ειδοποιήσεων της Apple. Υπάρχει σε δύο μορφές: ένα πιστοποιητικό .p12, που ισχύει έναν χρόνο και συνδέεται με μία μόνο εφαρμογή, ή ένα κλειδί .p8, που δεν λήγει και εξυπηρετεί όλες τις εφαρμογές του λογαριασμού σου. **Με το Expo δεν χρειάζεσαι το πιστοποιητικό: το EAS σου προτείνει να δημιουργήσεις ένα κλειδί .p8 στο πρώτο build, και η υπηρεσία push του Expo το χρησιμοποιεί για λογαριασμό σου.**

Ο οδηγός για [το developer certificate και το provisioning profile](https://devoria.fr/el/blog/ios-certificate-provisioning-profile-expo) αναφέρει το push key σε λίγες γραμμές. Εδώ το πάμε μέχρι τέλους: η επιλογή ανάμεσα στις δύο μορφές, τα περιβάλλοντα sandbox και production, η ανανέωση και τα προβλήματα που κόβουν τις ειδοποιήσεις στο TestFlight.

Δημοσιεύω τις εφαρμογές μου με Expo και EAS. Το Solys και το TradaZen δηλώνουν το plugin `expo-notifications` στη ρύθμισή τους: αυτό προετοιμάζει την εφαρμογή να λαμβάνει ειδοποιήσεις.

## Γιατί η Apple ζητά πιστοποιητικό ή κλειδί

Μια push ειδοποίηση ξεκινά από έναν server, τον δικό σου ή του Expo, που την παραδίδει στο APNs, το οποίο τη φέρνει στο iPhone. Άρα το APNs πρέπει να επαληθεύσει ότι αυτός ο server έχει δικαίωμα να γράφει στην εφαρμογή σου. Η Apple προσφέρει δύο τρόπους απόδειξης.

- **Σύνδεση με token, με κλειδί .p8.** [Σύμφωνα με την Apple](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns), είναι πιο γρήγορη, μπορεί να χρησιμοποιηθεί από πολλούς servers, και ένα κλειδί καλύπτει όλες τις εφαρμογές της ομάδας σου ή μέρος τους. Ο server σου υπογράφει με αυτό ένα token, που πρέπει να ξαναφτιάχνεται τουλάχιστον κάθε ώρα.
- **Σύνδεση με πιστοποιητικό, με αρχείο .p12.** [Η Apple διευκρινίζει](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) ότι το πιστοποιητικό αυτό συνδέεται με μία μόνο εφαρμογή και ισχύει έναν χρόνο. Πολλές εφαρμογές, πολλά πιστοποιητικά.

[Η σελίδα της Apple για τις λήξεις](https://developer.apple.com/support/expiration/) το θυμίζει: το κλειδί υπογραφής των tokens του APNs δεν λήγει ποτέ.

## Ο πίνακας .p8 / .p12

| Κριτήριο      | Κλειδί .p8                           | Πιστοποιητικό .p12              |
| ------------- | ------------------------------------ | ------------------------------- |
| Διάρκεια      | Χωρίς λήξη                           | Ένας χρόνος                     |
| Εμβέλεια      | Όλες οι εφαρμογές σου                | Μία μόνο εφαρμογή               |
| Περιβάλλον    | Επιλέγεται στη δημιουργία            | Sandbox και production          |
| Ανανέωση      | Καμία, εκτός από ανάκληση            | Κάθε χρόνο                      |
| Λήψη          | Μόνο μία φορά                        | Εξαγωγή από το Mac              |
| Πλήθος        | Δύο ανά περιβάλλον                   | Ένα ανά εφαρμογή                |
| Χρήση με Expo | Δημιουργία και διαχείριση από το EAS | Απουσιάζει από τα docs του 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 key και μετρά το πολύ δύο ανά λογαριασμό, χωρίς να ξεχωρίζει περιβάλλοντα ή κλειδιά ανά εφαρμογή. **Για μια εφαρμογή Expo, το κλειδί .p8 είναι η σωστή επιλογή.**

## Sandbox και production: δύο περιβάλλοντα

Το APNs έχει δύο servers: 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` με προφίλ development, `production` με προφίλ distribution και για το TestFlight.

**Ένα build του TestFlight μιλά λοιπόν με το production, ακριβώς όπως το App Store.**

Από την πλευρά του Expo, δύο λεπτομέρειες. [Η τεκμηρίωση του expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) αναφέρει ότι το entitlement γράφεται πάντα ως `development` στο project και μετά αλλάζει σε `production` στο archive ενός release build. Και κατά τη δημιουργία του, το Expo token συνδέεται με το περιβάλλον της εφαρμογής, που ανιχνεύεται αυτόματα: δεν χρειάζεται να επιλέξεις τίποτα στην αποστολή.

Αν δημιουργήσεις το κλειδί μόνος σου, η Apple σού ζητά το περιβάλλον και την εμβέλειά του: όλη η ομάδα ή ορισμένες εφαρμογές. Η τεκμηρίωσή της για developers περιγράφει πλέον κλειδιά ομάδας περιορισμένα στο sandbox ή στο production, ενώ τα παλιά κλειδιά που ισχύουν παντού εξακολουθούν να γίνονται δεκτά. [Η βοήθεια του λογαριασμού](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens), από την άλλη, λέει ακόμα ότι το κλειδί εξυπηρετεί και τα δύο περιβάλλοντα. Η Apple αντιφάσκει: κράτα το περιβάλλον που επιλέγεις στη δημιουργία. **Ένα κλειδί μόνο για sandbox δεν θα λειτουργήσει ούτε για το TestFlight ούτε για το App Store.**

## Πώς διαχειρίζεται το Expo το push key

Σύμφωνα με [τον οδηγό ρύθμισης του Expo](https://docs.expo.dev/push-notifications/push-notifications-setup/), που ενημερώθηκε στις 28 Ιουλίου 2026, το πρώτο σου development build σού προτείνει να ρυθμίσεις τις push ειδοποιήσεις και να δημιουργήσεις κλειδί APNs. Απάντησε ναι και στα δύο. Χωρίς EAS Build, τρέξε `eas credentials`. Χρειάζεσαι πληρωμένο λογαριασμό Apple Developer.

Στη συνέχεια:

- **Το EAS αποθηκεύει το κλειδί και το συνδέει με την εφαρμογή σου.** Σύμφωνα με το Expo, ένα κλειδί εξυπηρετεί όσες εφαρμογές θέλεις, και το ανέβασμα νέου κλειδιού δεν αλλάζει τα Expo Push tokens των χρηστών σου.
- **Ο server σου δεν καλεί το APNs.** Στέλνει στην υπηρεσία push του Expo, που προωθεί στο APNs. [Το Expo σού ζητά να διαβάζεις τα receipts](https://docs.expo.dev/push-notifications/sending-notifications/) περίπου 15 λεπτά μετά την αποστολή: εκεί εμφανίζονται τα σφάλματα.
- **Το plugin προσθέτει το 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 προτείνει development build: δοκίμασε με αυτό. Επίσης, η διαγραφή του κλειδιού με `eas credentials` το αφαιρεί από τους servers του Expo, όχι από τον λογαριασμό σου στην Apple. Για να ελευθερώσεις θέση, ανακάλεσέ το στο portal της Apple. Όπως κάθε μυστικό, το αρχείο .p8 δεν πρέπει ποτέ να καταλήξει στο repository σου: ο κανόνας είναι ίδιος με [τα API keys μιας εφαρμογής Expo](https://devoria.fr/el/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 profile σου, μετά αφαίρεση του push key και δημιουργία νέου.

**Το πιστοποιητικό .p12 λήγει κάθε χρόνο.** Η Apple ζητά να το ενημερώνεις πριν από τη λήξη και να παρακολουθείς την ημερομηνία του στο keychain. Μόλις λήξει ή ανακληθεί, [δεν μπορείς πια να στέλνεις ειδοποιήσεις](https://developer.apple.com/help/account/certificates/certificates-overview) στην εφαρμογή σου. Η Apple δεν περιγράφει ξεχωριστή ανανέωση: δημιουργείς νέο πιστοποιητικό από το identifier της εφαρμογής, το εγκαθιστάς στον server σου πριν από τη λήξη και μετά αφαιρείς το παλιό. **Η καλύτερη ανανέωση είναι να περάσεις στο κλειδί.**

> Διαχειρίζεσαι iPhone με Intune ή άλλο εργαλείο διαχείρισης συσκευών; Δεν είναι το ίδιο πιστοποιητικό. Το push certificate διαχείρισης συσκευών δημιουργείται στο Apple Push Certificates Portal και ανανεώνεται κάθε χρόνο. [Η Apple συνιστά](https://support.apple.com/guide/deployment/dep2de55389a) να σημειώσεις τον λογαριασμό Apple που χρησιμοποίησες: θα τον χρειαστείς για την ανανέωση.

## Τα συνηθισμένα προβλήματα και η λύση τους

### Δουλεύει στο development, όχι στο TestFlight

1. **Στέλνεις σε λάθος token.** Το build του TestFlight εγγράφεται στο production και παίρνει νέο token. Ένα token από το development build σου δεν δουλεύει: η Apple απαντά `BadDeviceToken` όταν [το token δεν αντιστοιχεί στο περιβάλλον](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Πάρε το token από την ίδια την εφαρμογή του TestFlight.
2. **Η εφαρμογή production δεν έχει push credentials.** Αυτή είναι η διάγνωση του FAQ του Expo. Έλεγξε τη σελίδα credentials του project στο expo.dev ή το `eas credentials`.
3. **Το κλειδί σου περιορίζεται στο sandbox.** Αντικατάστησέ το με κλειδί που ισχύει στο production.
4. **Το iPhone δεν παίρνει token.** Αν εγκατέστησες το build του TestFlight πάνω από build του Xcode, το Expo προτείνει επανεκκίνηση της συσκευής.

### «No valid aps-environment entitlement string found»

Σύμφωνα με το FAQ του Expo, αυτό το σφάλμα σημαίνει ότι δεν έχει ρυθμιστεί push key για το iOS project σου. Έλεγξε τη σελίδα credentials και ξανατρέξε build: το EAS θα σου προτείνει τότε να δημιουργήσεις το κλειδί. Έλεγξε επίσης ότι το `expo-notifications` υπάρχει όντως στα `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Η Apple στέλνει αυτό το email μετά την υποβολή: η εφαρμογή σου φαίνεται να εγγράφεται στο 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 της εφαρμογής. Ο δεύτερος εντοπίζει στο binary μια μέθοδο εγγραφής σε ειδοποιήσεις, που ο κώδικας του Expo περιέχει σε όλες τις εφαρμογές.

**Είναι προειδοποίηση, όχι απόρριψη**, διευκρινίζει το Expo. Αν χρησιμοποιείς ειδοποιήσεις, πρόσθεσε το plugin και ξανακάνε build: [το EAS συγχρονίζει τα capabilities](https://docs.expo.dev/build-reference/ios-capabilities/) του App ID σε κάθε build. Αλλιώς, αφαίρεσε το capability Push Notifications από το identifier σου στο portal της Apple. Η προειδοποίηση μπορεί να συνεχίσει να εμφανίζεται, χωρίς συνέπειες.

### InvalidCredentials ή όλες οι εφαρμογές βουβές ξαφνικά

Το `InvalidCredentials` σε ένα receipt σημαίνει ότι τα push credentials σου δεν ισχύουν πια, συχνά επειδή το κλειδί ανακλήθηκε. Όλες οι εφαρμογές που το χρησιμοποιούσαν σωπαίνουν ταυτόχρονα. Η λύση του Expo: `eas credentials` και μετά νέο κλειδί. Αν το receipt αναφέρει `InvalidProviderToken`, το Expo προτείνει να ξανακάνεις build δημιουργώντας ξανά το push key και το profile.

## Πριν ενεργοποιήσεις τις ειδοποιήσεις

Για να δοκιμάσεις τις ειδοποιήσεις στο iPhone σου πριν από την κυκλοφορία, ακολούθησε το [TestFlight για να δοκιμάσεις την εφαρμογή σου](https://devoria.fr/el/blog/testflight-dokimi-efarmogis-iphone). Αν στέλνεις silent notifications για να ξυπνάς την εφαρμογή, ξαναδιάβασε [το guideline 2.5.4 για τα background modes](https://devoria.fr/el/blog/guideline-2-5-4-background-mode-rejected-apple). Όλη η αλυσίδα, χωρίς Mac, βρίσκεται στο [δημοσίευση εφαρμογής iOS χωρίς Mac](https://devoria.fr/el/blog/publish-ios-app-without-mac-expo-eas), και τα βήματα της κυκλοφορίας στη σελίδα [δημοσίευση εφαρμογής στο App Store](https://devoria.fr/el/expertise/publish-an-app-on-the-app-store).

Πριν από την πρώτη σου υποβολή, κάνε τη [δωρεάν διάγνωση](https://devoria.fr/el/diagnostic): σου λέει τι μπλοκάρει στο project σου και σου στέλνει τη checklist μου κατά των απορρίψεων της Apple. Για να φτιάξεις την εφαρμογή, να συνδέσεις τις συνδρομές και να τη δημοσιεύσεις, το [iOS & Android Kit](https://devoria.fr/el/kits/ios) ακολουθεί τη διαδρομή σε τέσσερα βήματα με τον αρχικό κώδικα των εφαρμογών μου, με τον δικό σου ρυθμό.

## Συχνές ερωτήσεις

### Λήγει το push certificate της Apple;

Το πιστοποιητικό .p12 λήγει μετά από έναν χρόνο, και οι ειδοποιήσεις σου σταματούν αν δεν αντικατασταθεί. Το κλειδί .p8 δεν λήγει ποτέ: σταματά μόνο αν το ανακαλέσεις. Αυτός είναι ο κύριος λόγος να προτιμήσεις το κλειδί.

### Χρειάζεται ένα push certificate ανά εφαρμογή;

Με πιστοποιητικό .p12, ναι: κάθε πιστοποιητικό συνδέεται με μία μόνο εφαρμογή. Ένα κλειδί .p8 εξυπηρετεί όλες τις εφαρμογές του λογαριασμού σου. Με το Expo, λοιπόν, ένα μόνο κλειδί μπορεί να καλύψει όλο τον κατάλογό σου.

### Πώς ανανεώνω ένα push certificate της Apple;

Δημιούργησε νέο πιστοποιητικό από το identifier της εφαρμογής σου, με νέο αίτημα υπογραφής, εγκατάστησέ το στον server σου και μετά αφαίρεσε το παλιό. Κάν' το πριν από τη λήξη. Το πιο απλό είναι να περάσεις σε κλειδί .p8, που δεν χρειάζεται ανανέωση.

### Έχασα το αρχείο .p8, τι κάνω;

Η Apple επιτρέπει να το κατεβάσεις μόνο μία φορά. Αν το κλειδί το δημιούργησε το EAS, το Expo το κρατά και οι ειδοποιήσεις σου συνεχίζουν. Αλλιώς, δημιούργησε νέο κλειδί, πρόσθεσέ το με `eas credentials` και μετά ανακάλεσε το παλιό στο portal της Apple. Τα Expo Push tokens των χρηστών σου δεν αλλάζουν.

### Πρέπει να ξανακάνω build αφού αλλάξω push key;

Γενικά, όχι. Το κλειδί χρησιμεύει στον server που στέλνει, όχι στην εγκατεστημένη εφαρμογή, και το Expo αναφέρει ότι ένα νέο κλειδί δεν αλλάζει τα tokens. Εξαίρεση: αν τα receipts δείχνουν `InvalidProviderToken`, το Expo προτείνει να ξανακάνεις build με νέο κλειδί και νέο profile.


## Το project σου

[Review Kit](https://devoria.fr/el/kits/app-review): Η checklist μου για το review του App Store, οι απορρίψεις μου από την Apple διορθωμένες, η checklist του Google Play και τρία skills του Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/el/kits/ios): Φτιάξε την εφαρμογή σου για iPhone και Android με το Claude Code: ο αρχικός κώδικας των εφαρμογών μου, η διαδρομή μέχρι τα stores και όλα τα kits. 99 €.

[Διάγνωση: τι σε χωρίζει από την iPhone εφαρμογή σου](https://devoria.fr/el/diagnostic): 7 ερωτήσεις, 60 δευτερόλεπτα: μαθαίνεις τι πραγματικά σε μπλοκάρει για να δημοσιεύσεις την iPhone εφαρμογή σου, τη διαδρομή σου σε 4 βήματα και το kit που σου ταιριάζει.
