Certificato push Apple: .p8 o .p12 con Expo
Di Mehdi Azizi
Pubblicato il , 8 min
Per le notifiche push Apple offre una chiave .p8 senza scadenza, valida per tutte le tue app, o un certificato .p12 annuale. Con Expo, EAS gestisce la chiave.
Il certificato push di Apple autorizza un server a inviare notifiche alla tua app tramite APNs, il servizio di notifiche di Apple. Esiste in due forme: un certificato .p12, valido un anno e legato a una sola app, oppure una chiave .p8, che non scade e serve per tutte le app del tuo account. Con Expo non ti serve il certificato: EAS ti propone di creare una chiave .p8 al primo build, e il servizio push di Expo la usa al posto tuo.
La guida su certificato sviluppatore e provisioning profile accenna alla chiave push in poche righe. Qui andiamo fino in fondo: la scelta tra i due formati, gli ambienti sandbox e production, il rinnovo e i guasti che bloccano le notifiche in TestFlight.
Pubblico le mie app con Expo ed EAS. Solys e TradaZen dichiarano il plugin expo-notifications nella loro configurazione: è lui che prepara l'app a ricevere notifiche.
Perché Apple chiede un certificato o una chiave
Una notifica push parte da un server, il tuo o quello di Expo, che la affida ad APNs, che la consegna all'iPhone. APNs deve quindi verificare che quel server abbia il diritto di scrivere alla tua app. Apple propone due modi per dimostrarlo.
- La connessione tramite token, con una chiave .p8. Secondo Apple è più veloce, utilizzabile da più server, e una stessa chiave copre tutte le app del tuo team o una parte. Il tuo server la usa per firmare un token, da rigenerare almeno ogni ora.
- La connessione tramite certificato, con un file .p12. Apple precisa che questo certificato è legato a una sola app e vale un anno. Più app, più certificati.
La pagina di Apple sulle scadenze lo ricorda: la chiave di firma dei token APNs non scade mai.
La tabella .p8 / .p12
| Criterio | Chiave .p8 | Certificato .p12 |
|---|---|---|
| Durata | Nessuna scadenza | Un anno |
| Portata | Tutte le tue app | Una sola app |
| Ambiente | Scelto alla creazione | Sandbox e production |
| Rinnovo | Nessuno, salvo revoca | Ogni anno |
| Download | Una sola volta | Export dal Mac |
| Numero | Due per ambiente | Uno per app |
| Uso con Expo | Creata e gestita da EAS | Assente dalla doc Expo |
Tre precisazioni. Il file .p8 si scarica una sola volta: Apple non lo conserva nel tuo account. Il .p12 invece si esporta dal portachiavi del Mac che ha creato il certificato. E il limite di due chiavi per ambiente vale per le chiavi di team. Per le chiavi limitate a certe app, Apple ne consente fino a 200 per ambiente.
La pagina di Expo sulle credenziali parla solo della chiave push, e ne conta al massimo due per account, senza distinguere gli ambienti né le chiavi per app. Per un'app Expo, la chiave .p8 è la scelta giusta.
Sandbox e production: due ambienti
APNs ha due server: development, chiamato anche sandbox, e production. Apple riserva il primo ai test e il secondo alle app pubblicate. L'app sa quale usare grazie all'entitlement aps-environment. Secondo Apple, il suo valore segue il profilo di firma: development con un profilo di sviluppo, production con un profilo di distribuzione e per TestFlight.
Un build TestFlight parla quindi con production, esattamente come l'App Store.
Lato Expo, due dettagli. La documentazione di expo-notifications indica che l'entitlement è sempre scritto come development nel progetto, poi passato a production nell'archivio di un build di release. E alla creazione, il token Expo viene associato all'ambiente dell'app, rilevato automaticamente: non devi scegliere nulla al momento dell'invio.
Se crei la chiave da solo, Apple ti chiede il suo ambiente e la sua portata: tutto il team o certe app. La sua documentazione per sviluppatori descrive ora chiavi di team limitate alla sandbox o a production, mentre le vecchie chiavi valide ovunque restano accettate. L'aiuto dell'account, invece, afferma ancora che la chiave serve per entrambi gli ambienti. Apple si contraddice: tieni a mente l'ambiente che scegli alla creazione. Una chiave riservata alla sandbox non funzionerà né per TestFlight né per l'App Store.
Come Expo gestisce la chiave push
Secondo la guida di configurazione di Expo, aggiornata il 28 luglio 2026, il tuo primo build di sviluppo ti propone di configurare le notifiche push e di generare una chiave APNs. Rispondi sì a entrambe. Senza EAS Build, lancia eas credentials. Ti serve un account Apple Developer a pagamento.
Poi:
- EAS conserva la chiave e la associa alla tua app. Secondo Expo, una chiave serve per tutte le app che vuoi, e caricarne una nuova non cambia i token Expo Push dei tuoi utenti.
- Il tuo server non chiama APNs. Invia al servizio push di Expo, che inoltra ad APNs. Expo ti chiede di leggere le ricevute circa 15 minuti dopo l'invio: è lì che compaiono gli errori.
- Il plugin imposta l'entitlement. Dichiara
expo-notificationsinplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Due trappole. La FAQ di Expo dice che Expo Go non gestisce più le notifiche push dall'SDK 53, mentre la pagina di expo-notifications si riferisce solo ad Android. In entrambi i casi Expo consiglia un build di sviluppo: testa con quello. E cancellare la chiave con eas credentials la rimuove dai server di Expo, non dal tuo account Apple. Per liberare un posto, revocala nel portale Apple. Come ogni segreto, il file .p8 non deve mai finire nel tuo repository: la regola è la stessa delle chiavi API di un'app Expo.
Rinnovare: cosa scade davvero
La chiave .p8 non ha niente da rinnovare. Smette di funzionare solo se la revochi. Se pensi che sia compromessa, Apple consiglia di creare una nuova chiave, passare a quella e solo dopo revocare la vecchia. Per sostituire la chiave con Expo, la FAQ indica la procedura: eas credentials, iOS, il tuo profilo di build, poi rimozione della chiave push e generazione di una nuova.
Il certificato .p12 scade ogni anno. Apple chiede di aggiornarlo prima della scadenza e di tenere d'occhio la data nel portachiavi. Una volta scaduto o revocato, non puoi più inviare notifiche alla tua app. Apple non descrive un rinnovo vero e proprio: crei un nuovo certificato dall'identificativo dell'app, lo installi sul server prima della scadenza, poi rimuovi il vecchio. Il miglior rinnovo resta passare alla chiave.
Gestisci iPhone con Intune o un altro strumento di gestione dei dispositivi? Non è lo stesso certificato. Il certificato push per la gestione dei dispositivi si crea sull'Apple Push Certificates Portal e si rinnova ogni anno. Apple consiglia di annotare l'account Apple usato: servirà per il rinnovo.
I guasti tipici e come risolverli
Funziona in sviluppo, non in TestFlight
- Invii al token sbagliato. Il build TestFlight si registra in production e ottiene un nuovo token. Un token del tuo build di sviluppo non funziona: Apple risponde
BadDeviceTokenquando il token non corrisponde all'ambiente. Recupera il token dall'app TestFlight stessa. - L'app di production non ha credenziali push. È la diagnosi della FAQ di Expo. Controlla la pagina delle credenziali del progetto su expo.dev, oppure
eas credentials. - La tua chiave è limitata alla sandbox. Sostituiscila con una chiave valida in production.
- L'iPhone non ottiene un token. Se hai installato il build TestFlight sopra un build Xcode, Expo suggerisce di riavviare il dispositivo.
"No valid aps-environment entitlement string found"
Secondo la FAQ di Expo, questo errore segnala che nessuna chiave push è configurata per il tuo progetto iOS. Controlla la pagina delle credenziali, poi rilancia un build: EAS ti proporrà di generare la chiave. Verifica anche che expo-notifications sia presente in plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple invia questa e-mail dopo l'invio: la tua app sembra registrarsi ad APNs, ma la sua firma non contiene l'entitlement aps-environment. La nota di Expo sull'SDK 51 lo spiega. Da quell'SDK, l'entitlement viene aggiunto solo se expo-notifications è installato. L'avviso nasce da due controlli di Apple. Il primo confronta le capability del tuo identificativo app con gli entitlement dell'app. Il secondo individua nel binario un metodo di registrazione alle notifiche, che il codice di Expo contiene in tutte le app.
È un avviso, non un rifiuto, precisa Expo. Se usi le notifiche, aggiungi il plugin e rifai un build: EAS sincronizza le capability dell'identificativo app a ogni build. Altrimenti, rimuovi la capability Push Notifications dal tuo identificativo nel portale Apple. L'avviso può restare, senza conseguenze.
InvalidCredentials o tutte le app mute all'improvviso
InvalidCredentials in una ricevuta significa che le tue credenziali push non sono più valide, spesso perché la chiave è stata revocata. Tutte le app che la usavano tacciono nello stesso momento. La soluzione di Expo: eas credentials, poi una nuova chiave. Se la ricevuta riporta InvalidProviderToken, Expo consiglia di rifare un build rigenerando la chiave push e il profilo.
Prima di attivare le notifiche
Per testare le notifiche sul tuo iPhone prima del lancio, segui TestFlight per testare la tua app. Se invii notifiche silenziose per risvegliare l'app, rileggi la guideline 2.5.4 sulle modalità in background. Tutta la catena, senza Mac, è in pubblicare un'app iOS senza Mac, e i passaggi del lancio nella pagina pubblicare un'applicazione sull'App Store.
Prima del tuo primo invio, fai la diagnosi gratuita: ti dice cosa blocca nel tuo progetto e ti invia la mia checklist anti-rifiuto Apple. Per costruire l'app, collegare gli abbonamenti e pubblicarla, l'iOS & Android Kit segue il percorso in quattro tappe con il codice di partenza delle mie app, al tuo ritmo.
Domande frequenti
Il certificato push Apple scade?
Il certificato .p12 scade dopo un anno, e le tue notifiche si fermano se non lo sostituisci. La chiave .p8 non scade mai: smette di funzionare solo se la revochi. È il motivo principale per preferire la chiave.
Serve un certificato push per ogni app?
Con un certificato .p12 sì: ogni certificato è legato a una sola app. Una chiave .p8 serve per tutte le app del tuo account. Con Expo, quindi, una sola chiave può coprire tutto il tuo catalogo.
Come si rinnova un certificato push Apple?
Crea un nuovo certificato dall'identificativo della tua app, con una nuova richiesta di firma, installalo sul server, poi rimuovi il vecchio. Fallo prima della scadenza. La cosa più semplice resta passare a una chiave .p8, che non si rinnova.
Ho perso il mio file .p8, cosa faccio?
Apple permette di scaricarlo una sola volta. Se la chiave l'ha creata EAS, Expo la conserva e le tue notifiche continuano. Altrimenti crea una nuova chiave, aggiungila con eas credentials, poi revoca la vecchia nel portale Apple. I token Expo Push dei tuoi utenti non cambiano.
Bisogna rifare un build dopo aver cambiato chiave push?
In generale no. La chiave serve al server che invia, non all'app installata, ed Expo indica che una nuova chiave non cambia i token. Eccezione: se le ricevute segnalano InvalidProviderToken, Expo consiglia di rifare un build con una nuova chiave e un nuovo profilo.

