Certificat push Apple: cheie .p8 sau .p12 cu Expo
De Mehdi Azizi
Publicat pe , 8 min.
Pentru notificări push, Apple oferă o cheie .p8 fără expirare, pentru toate aplicațiile, sau un certificat .p12 anual. Cu Expo, EAS gestionează cheia.
Certificatul push de la Apple îi permite unui server să trimită notificări aplicației tale prin APNs, serviciul de notificări al Apple. Există în două forme: un certificat .p12, valabil un an și legat de o singură aplicație, sau o cheie .p8, care nu expiră și merge pentru toate aplicațiile din contul tău. Cu Expo nu ai nevoie de certificat: EAS îți propune să creezi o cheie .p8 la primul build, iar serviciul push al Expo o folosește în locul tău.
Ghidul despre certificatul de dezvoltator și provisioning profile pomenește cheia push în câteva rânduri. Aici mergem până la capăt: alegerea între cele două formate, mediile sandbox și production, reînnoirea și problemele care opresc notificările în TestFlight.
Îmi public aplicațiile cu Expo și EAS. Solys și TradaZen declară plugin-ul expo-notifications în configurație: el pregătește aplicația să primească notificări.
De ce cere Apple un certificat sau o cheie
O notificare push pleacă de pe un server, al tău sau al Expo, care o predă către APNs, care o livrează pe iPhone. Deci APNs trebuie să verifice că serverul are dreptul să-i scrie aplicației tale. Apple propune două moduri de a dovedi asta.
- Conexiunea pe bază de token, cu o cheie .p8. Potrivit Apple, e mai rapidă, poate fi folosită de pe mai multe servere, iar o singură cheie acoperă toate aplicațiile echipei tale sau o parte din ele. Serverul tău semnează cu ea un token, care trebuie refăcut cel puțin o dată pe oră.
- Conexiunea pe bază de certificat, cu un fișier .p12. Apple precizează că acest certificat e legat de o singură aplicație și e valabil un an. Mai multe aplicații, mai multe certificate.
Pagina Apple despre expirări o spune clar: cheia de semnare a tokenurilor APNs nu expiră niciodată.
Tabelul .p8 / .p12
| Criteriu | Cheie .p8 | Certificat .p12 |
|---|---|---|
| Durată | Fără expirare | Un an |
| Acoperire | Toate aplicațiile tale | O singură aplicație |
| Mediu | Ales la creare | Sandbox și production |
| Reînnoire | Niciuna, decât la revocare | În fiecare an |
| Descărcare | O singură dată | Export de pe Mac |
| Număr | Două per mediu | Unul per aplicație |
| Folosire cu Expo | Creată și gestionată de EAS | Absent din documentația Expo |
Trei precizări. Fișierul .p8 se descarcă o singură dată: Apple nu îl păstrează în contul tău. Fișierul .p12, în schimb, se exportă din keychain-ul Mac-ului care a creat certificatul. Iar limita de două chei per mediu se aplică cheilor de echipă. Pentru cheile limitate la anumite aplicații, Apple permite până la 200 per mediu.
Pagina Expo despre credențiale vorbește doar despre cheia push și numără maximum două per cont, fără să facă distincție între medii sau chei per aplicație. Pentru o aplicație Expo, cheia .p8 e alegerea potrivită.
Sandbox și production: două medii
APNs are două servere: development, numit și sandbox, și production. Apple îl rezervă pe primul pentru teste și pe al doilea pentru aplicațiile publicate. Aplicația știe pe care să-l folosească datorită entitlement-ului aps-environment. Potrivit Apple, valoarea lui urmează profilul de semnare: development cu un profil de dezvoltare, production cu un profil de distribuție și pentru TestFlight.
Deci un build TestFlight vorbește cu production, exact ca App Store.
La Expo, două detalii. Documentația expo-notifications spune că entitlement-ul e mereu scris ca development în proiect, apoi trecut pe production în arhiva unui build de release. Iar la creare, tokenul Expo e legat de mediul aplicației, detectat automat: nu ai nimic de ales la trimitere.
Dacă creezi cheia singur, Apple îți cere mediul și acoperirea ei: toată echipa sau anumite aplicații. Documentația pentru dezvoltatori descrie acum chei de echipă limitate la sandbox sau la production, vechile chei valabile peste tot fiind în continuare acceptate. Ajutorul pentru cont, în schimb, susține încă faptul că cheia merge pentru ambele medii. Apple se contrazice: ține minte mediul pe care îl alegi la creare. O cheie rezervată pentru sandbox nu va merge nici pentru TestFlight, nici pentru App Store.
Cum gestionează Expo cheia push
Conform ghidului de configurare Expo, actualizat pe 28 iulie 2026, primul tău build de dezvoltare îți propune să configurezi notificările push și să generezi o cheie APNs. Răspunde da la ambele. Fără EAS Build, rulează eas credentials. Ai nevoie de un cont Apple Developer plătit.
Apoi:
- EAS stochează cheia și o asociază aplicației tale. Potrivit Expo, o cheie merge pentru câte aplicații vrei, iar dacă încarci una nouă, tokenurile Expo Push ale utilizatorilor tăi nu se schimbă.
- Serverul tău nu apelează APNs. Trimite către serviciul push al Expo, care transmite către APNs. Expo îți cere să citești chitanțele la aproximativ 15 minute după trimitere: acolo apar erorile.
- Plugin-ul adaugă entitlement-ul. Declară
expo-notificationsînplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Două capcane. FAQ-ul Expo spune că Expo Go nu mai suportă notificările push începând cu SDK 53, în timp ce pagina expo-notifications se referă doar la Android. În ambele cazuri, Expo recomandă un build de dezvoltare: testează cu el. Iar dacă ștergi cheia cu eas credentials, o scoți de pe serverele Expo, nu din contul tău Apple. Ca să eliberezi un loc, revoc-o în portalul Apple. Ca orice secret, fișierul .p8 nu trebuie să ajungă niciodată în repository-ul tău: regula e aceeași ca pentru cheile API ale unei aplicații Expo.
Reînnoirea: ce expiră de fapt
Cheia .p8 nu are nimic de reînnoit. Se oprește doar dacă o revoci. Dacă bănuiești că a fost compromisă, Apple recomandă să creezi o cheie nouă, să treci pe ea și abia apoi să o revoci pe cea veche. Ca să înlocuiești cheia cu Expo, FAQ-ul dă pașii: eas credentials, iOS, profilul tău de build, apoi ștergerea cheii push și generarea uneia noi.
Certificatul .p12 expiră în fiecare an. Apple cere să-l actualizezi înainte de termen și să urmărești data în keychain. Odată expirat sau revocat, nu mai poți trimite notificări aplicației tale. Apple nu descrie o reînnoire separată: creezi un certificat nou din identificatorul aplicației, îl instalezi pe server înainte de termen, apoi îl scoți pe cel vechi. Cea mai bună reînnoire rămâne trecerea la cheie.
Administrezi iPhone-uri cu Intune sau alt instrument de gestionare a dispozitivelor? Nu e același certificat. Certificatul push pentru gestionarea dispozitivelor se creează pe Apple Push Certificates Portal și se reînnoiește anual. Apple recomandă să notezi contul Apple folosit: îți va trebui la reînnoire.
Problemele tipice și cum le rezolvi
Merge în development, nu în TestFlight
- Trimiți către tokenul greșit. Build-ul TestFlight se înregistrează în production și primește un token nou. Un token din build-ul de dezvoltare nu merge: Apple răspunde
BadDeviceTokencând tokenul nu corespunde mediului. Ia tokenul chiar din aplicația instalată prin TestFlight. - Aplicația de production nu are credențiale push. E diagnosticul din FAQ-ul Expo. Verifică pagina de credențiale a proiectului pe expo.dev sau
eas credentials. - Cheia ta e limitată la sandbox. Înlocuiește-o cu o cheie valabilă în production.
- iPhone-ul nu primește token. Dacă ai instalat build-ul TestFlight peste un build din Xcode, Expo sugerează să repornești dispozitivul.
„No valid aps-environment entitlement string found”
Potrivit FAQ-ului Expo, eroarea asta semnalează că nicio cheie push nu e configurată pentru proiectul tău iOS. Verifică pagina de credențiale, apoi relansează un build: EAS îți propune atunci să generezi cheia. Verifică și că expo-notifications apare în plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple trimite acest e-mail după upload: aplicația ta pare să se înregistreze la APNs, dar semnătura ei nu conține entitlement-ul aps-environment. Nota Expo despre SDK 51 explică asta. Începând cu acest SDK, entitlement-ul e adăugat doar dacă expo-notifications e instalat. Avertismentul vine din două verificări Apple. Prima compară capabilitățile identificatorului aplicației cu entitlement-urile aplicației. A doua caută în binar o metodă de înregistrare la notificări, pe care codul Expo o conține în toate aplicațiile.
E un avertisment, nu o respingere, precizează Expo. Dacă folosești notificări, adaugă plugin-ul și refă build-ul: EAS sincronizează capabilitățile identificatorului aplicației la fiecare build. Altfel, scoate capabilitatea Push Notifications din identificator în portalul Apple. Avertismentul poate persista, fără consecințe.
InvalidCredentials sau toate aplicațiile mute dintr-odată
InvalidCredentials într-o chitanță înseamnă că credențialele tale push nu mai sunt valide, adesea pentru că cheia a fost revocată. Toate aplicațiile care o foloseau tac în același timp. Soluția Expo: eas credentials, apoi o cheie nouă. Dacă chitanța menționează InvalidProviderToken, Expo recomandă să refaci build-ul regenerând cheia push și profilul.
Înainte să activezi notificările
Ca să testezi notificările pe iPhone înainte de lansare, urmează TestFlight pentru a-ți testa aplicația. Dacă trimiți notificări silențioase ca să trezești aplicația, recitește guideline-ul 2.5.4 despre modurile de fundal. Tot lanțul, fără Mac, e în publicarea unei aplicații iOS fără Mac, iar pașii lansării pe pagina publicarea unei aplicații pe App Store.
Înainte de primul upload, fă diagnosticul gratuit: îți spune ce blochează în proiectul tău și îți trimite checklist-ul meu anti-respingere Apple. Ca să construiești aplicația, să conectezi abonamentele și s-o publici, iOS & Android Kit urmează parcursul în patru etape cu codul de pornire al aplicațiilor mele, în ritmul tău.
Întrebări frecvente
Expiră certificatul push Apple?
Certificatul .p12 expiră după un an, iar notificările se opresc dacă nu e înlocuit. Cheia .p8 nu expiră niciodată: se oprește doar dacă o revoci. Acesta e motivul principal să preferi cheia.
Ai nevoie de un certificat push pentru fiecare aplicație?
Cu un certificat .p12, da: fiecare certificat e legat de o singură aplicație. O cheie .p8 merge pentru toate aplicațiile din contul tău. Deci cu Expo, o singură cheie îți poate acoperi tot catalogul.
Cum reînnoiești un certificat push Apple?
Creează un certificat nou din identificatorul aplicației, cu o nouă cerere de semnare, instalează-l pe server, apoi scoate-l pe cel vechi. Fă asta înainte de termen. Cel mai simplu rămâne să treci la o cheie .p8, care nu se reînnoiește.
Mi-am pierdut fișierul .p8, ce fac?
Apple îți permite să-l descarci o singură dată. Dacă EAS a creat cheia, Expo o păstrează și notificările continuă. Altfel, creează o cheie nouă, adaug-o cu eas credentials, apoi revoc-o pe cea veche în portalul Apple. Tokenurile Expo Push ale utilizatorilor tăi nu se schimbă.
Trebuie refăcut build-ul după schimbarea cheii push?
În general, nu. Cheia servește serverului care trimite, nu aplicației instalate, iar Expo spune că o cheie nouă nu schimbă tokenurile. Excepție: dacă chitanțele semnalează InvalidProviderToken, Expo recomandă să refaci build-ul cu o cheie nouă și un profil nou.

