Apple push notification certifikát: .p8 alebo .p12 s Expo
Autor: Mehdi Azizi
Zverejnené , 8 min
Na push notifikácie ponúka Apple kľúč .p8 bez expirácie pre všetky tvoje appky alebo ročný certifikát .p12. S Expo spravuje kľúč EAS.
Push certifikát od Apple oprávňuje server posielať notifikácie tvojej appke cez APNs, notifikačnú službu Apple. Existuje v dvoch podobách: certifikát .p12, platný jeden rok a viazaný na jedinú appku, alebo kľúč .p8, ktorý neexpiruje a slúži všetkým appkám tvojho účtu. S Expo certifikát nepotrebuješ: EAS ti pri prvom builde ponúkne vytvoriť kľúč .p8 a push služba Expo ho používa za teba.
Návod o vývojárskom certifikáte a provisioning profile spomína push kľúč len v pár riadkoch. Tu ideme až do konca: výber medzi dvoma formátmi, prostredia sandbox a produkcia, obnovovanie a poruchy, ktoré vypnú notifikácie v TestFlighte.
Svoje appky publikujem s Expo a EAS. Solys aj TradaZen majú v konfigurácii plugin expo-notifications: práve ten pripravuje appku na príjem notifikácií.
Prečo Apple vyžaduje certifikát alebo kľúč
Push notifikácia odchádza zo servera, tvojho alebo z Expo, ktorý ju odovzdá APNs a to ju doručí do iPhonu. APNs teda musí overiť, že tento server má právo písať tvojej appke. Apple ponúka dva spôsoby, ako to dokázať.
- Pripojenie cez token s kľúčom .p8. Podľa Apple je rýchlejšie, použiteľné z viacerých serverov a jeden kľúč pokryje všetky appky tvojho tímu alebo ich časť. Tvoj server ním podpisuje token, ktorý treba obnoviť aspoň raz za hodinu.
- Pripojenie cez certifikát so súborom .p12. Apple upresňuje, že tento certifikát je viazaný na jedinú appku a platí jeden rok. Viac appiek, viac certifikátov.
Stránka Apple o expiráciách to pripomína: podpisový kľúč APNs tokenov nikdy neexpiruje.
Tabuľka .p8 / .p12
| Kritérium | Kľúč .p8 | Certifikát .p12 |
|---|---|---|
| Platnosť | Bez expirácie | Jeden rok |
| Rozsah | Všetky tvoje appky | Jediná appka |
| Prostredie | Volí sa pri vytvorení | Sandbox aj produkcia |
| Obnovovanie | Žiadne, okrem zrušenia | Každý rok |
| Stiahnutie | Iba raz | Export z Macu |
| Počet | Dva na prostredie | Jeden na appku |
| Použitie s Expo | Vytvára a spravuje EAS | V dokumentácii Expo nie je |
Tri upresnenia. Súbor .p8 sa dá stiahnuť iba raz: Apple ho v tvojom účte neuchováva. Súbor .p12 sa naopak exportuje z kľúčenky Macu, ktorý certifikát vytvoril. A limit dvoch kľúčov na prostredie platí pre tímové kľúče. Pre kľúče obmedzené na niektoré appky Apple povoľuje až 200 na prostredie.
Stránka Expo o prihlasovacích údajoch hovorí iba o push kľúči a uvádza maximálne dva na účet, bez rozlíšenia prostredí či kľúčov pre jednotlivé appky. Pre appku s Expo je kľúč .p8 správna voľba.
Sandbox a produkcia: dve prostredia
APNs má dva servery: vývojový, nazývaný aj sandbox, a produkčný. Apple vyhradzuje prvý na testy a druhý pre publikované appky. Appka vie, ktorý použiť, vďaka entitlementu aps-environment. Podľa Apple sa jeho hodnota riadi podpisovým profilom: development s vývojovým profilom, production s distribučným profilom a pre TestFlight.
Build v TestFlighte teda komunikuje s produkciou, presne ako App Store.
Na strane Expo dva detaily. Dokumentácia expo-notifications uvádza, že entitlement je v projekte vždy zapísaný ako development a v archíve release buildu sa prepne na production. A Expo token sa pri vytvorení naviaže na prostredie appky, ktoré sa zistí automaticky: pri odosielaní nemusíš nič voliť.
Ak si kľúč vytváraš sám, Apple sa ťa spýta na jeho prostredie a rozsah: celý tím alebo niektoré appky. Jeho vývojárska dokumentácia dnes opisuje tímové kľúče obmedzené na sandbox alebo produkciu, pričom staré kľúče platné všade zostávajú akceptované. Pomocník k účtu však stále tvrdí, že kľúč slúži pre obe prostredia. Apple si protirečí: riaď sa prostredím, ktoré zvolíš pri vytvorení. Kľúč vyhradený pre sandbox nebude fungovať ani v TestFlighte, ani v App Store.
Ako Expo spravuje push kľúč
Podľa návodu na nastavenie od Expo, aktualizovaného 28. júla 2026, ti prvý vývojový build ponúkne nastaviť push notifikácie a vygenerovať APNs kľúč. Na oboje odpovedz áno. Bez EAS Build spusti eas credentials. Potrebuješ platený účet Apple Developer.
Potom:
- EAS kľúč uloží a priradí ho k tvojej appke. Podľa Expo slúži jeden kľúč toľkým appkám, koľko chceš, a nahratie nového nezmení Expo Push tokeny tvojich používateľov.
- Tvoj server nevolá APNs. Posiela na push službu Expo, ktorá to odovzdá APNs. Expo ťa žiada čítať potvrdenia približne 15 minút po odoslaní: práve tam sa zobrazujú chyby.
- Plugin nastaví entitlement. Pridaj
expo-notificationsdoplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Dve pasce. FAQ od Expo hovorí, že Expo Go od SDK 53 už push notifikácie nepodporuje, kým stránka expo-notifications sa týka iba Androidu. V oboch prípadoch Expo odporúča vývojový build: testuj s ním. A vymazanie kľúča cez eas credentials ho odstráni zo serverov Expo, nie z tvojho Apple účtu. Ak chceš uvoľniť miesto, zruš ho v portáli Apple. Ako každé tajomstvo, ani súbor .p8 nesmie skončiť v tvojom repozitári: pravidlo je rovnaké ako pri API kľúčoch v appke s Expo.
Obnovovanie: čo naozaj expiruje
Kľúč .p8 netreba obnovovať. Prestane fungovať, iba ak ho zrušíš. Ak máš podozrenie, že je kompromitovaný, Apple odporúča vytvoriť nový kľúč, prepnúť sa naň a až potom zrušiť ten starý. Na výmenu kľúča s Expo uvádza FAQ postup: eas credentials, iOS, tvoj build profil, potom odstránenie push kľúča a vygenerovanie nového.
Certifikát .p12 expiruje každý rok. Apple žiada aktualizovať ho pred termínom a sledovať jeho dátum v kľúčenke. Keď expiruje alebo je zrušený, už nemôžeš posielať notifikácie svojej appke. Apple neopisuje samostatné obnovenie: vytvoríš nový certifikát z identifikátora appky, nainštaluješ ho na server pred termínom a potom odstrániš starý. Najlepšie obnovenie je prejsť na kľúč.
Spravuješ iPhony cez Intune alebo iný nástroj na správu zariadení? To nie je ten istý certifikát. Push certifikát na správu zariadení sa vytvára na Apple Push Certificates Portal a obnovuje sa každý rok. Apple odporúča zapísať si použitý Apple účet: bude potrebný pri obnove.
Typické poruchy a ich oprava
Vo vývoji to funguje, v TestFlighte nie
- Posielaš na nesprávny token. Build z TestFlightu sa registruje v produkcii a dostane nový token. Token z vývojového buildu nefunguje: Apple odpovie
BadDeviceToken, keď token nezodpovedá prostrediu. Získaj token priamo z appky v TestFlighte. - Produkčná appka nemá push prihlasovacie údaje. To je diagnóza z FAQ od Expo. Skontroluj stránku prihlasovacích údajov projektu na expo.dev alebo
eas credentials. - Tvoj kľúč je obmedzený na sandbox. Nahraď ho kľúčom platným v produkcii.
- iPhone nedostane token. Ak si build z TestFlightu nainštaloval cez build z Xcode, Expo odporúča zariadenie reštartovať.
„No valid aps-environment entitlement string found“
Podľa FAQ od Expo táto chyba znamená, že pre tvoj iOS projekt nie je nastavený žiadny push kľúč. Skontroluj stránku prihlasovacích údajov a spusti build znova: EAS ti vtedy ponúkne kľúč vygenerovať. Over aj, že expo-notifications je naozaj v plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple pošle tento e-mail po odoslaní: tvoja appka sa zrejme registruje do APNs, ale jej podpis neobsahuje entitlement aps-environment. Poznámka Expo k SDK 51 to vysvetľuje. Od tohto SDK sa entitlement pridáva, iba ak je nainštalovaný expo-notifications. Upozornenie pochádza z dvoch kontrol Apple. Prvá porovnáva schopnosti identifikátora appky s entitlementmi appky. Druhá nájde v binárke metódu registrácie notifikácií, ktorú kód Expo obsahuje vo všetkých appkách.
Je to upozornenie, nie zamietnutie, upresňuje Expo. Ak notifikácie používaš, pridaj plugin a sprav nový build: EAS synchronizuje schopnosti identifikátora appky pri každom builde. Inak odstráň schopnosť Push Notifications zo svojho identifikátora v portáli Apple. Upozornenie môže pretrvávať, bez následkov.
InvalidCredentials alebo všetky appky naraz stíchnu
InvalidCredentials v potvrdení znamená, že tvoje push prihlasovacie údaje už nie sú platné, často preto, že kľúč bol zrušený. Všetky appky, ktoré ho používali, stíchnu naraz. Oprava podľa Expo: eas credentials a potom nový kľúč. Ak potvrdenie uvádza InvalidProviderToken, Expo odporúča spraviť nový build s pregenerovaním push kľúča a profilu.
Pred zapnutím notifikácií
Ak chceš otestovať notifikácie na svojom iPhone pred vydaním, riaď sa návodom TestFlight na testovanie appky. Ak posielaš tiché notifikácie na prebudenie appky, prečítaj si guideline 2.5.4 o režimoch na pozadí. Celý postup bez Macu nájdeš v článku publikovanie iOS appky bez Macu a kroky vydania na stránke publikovanie aplikácie v App Store.
Pred prvým odoslaním si sprav bezplatnú diagnostiku: povie ti, čo v tvojom projekte blokuje, a pošle ti môj checklist proti zamietnutiu od Apple. Na vytvorenie appky, napojenie predplatného a publikovanie prevedie iOS & Android Kit celou cestou v štyroch krokoch so štartovacím kódom mojich appiek, tvojím tempom.
Často kladené otázky
Expiruje push certifikát od Apple?
Certifikát .p12 expiruje po jednom roku a ak ho nenahradíš, tvoje notifikácie prestanú chodiť. Kľúč .p8 nikdy neexpiruje: prestane fungovať, iba ak ho zrušíš. To je hlavný dôvod uprednostniť kľúč.
Treba push certifikát pre každú appku?
S certifikátom .p12 áno: každý certifikát je viazaný na jedinú appku. Kľúč .p8 slúži všetkým appkám tvojho účtu. S Expo teda jeden kľúč pokryje celý tvoj katalóg.
Ako obnoviť push certifikát od Apple?
Vytvor nový certifikát z identifikátora svojej appky s novou žiadosťou o podpis, nainštaluj ho na server a potom odstráň starý. Urob to pred termínom. Najjednoduchšie je prejsť na kľúč .p8, ktorý sa neobnovuje.
Stratil som súbor .p8, čo robiť?
Apple ho umožňuje stiahnuť iba raz. Ak kľúč vytvoril EAS, Expo ho uchováva a tvoje notifikácie fungujú ďalej. Inak vytvor nový kľúč, pridaj ho cez eas credentials a potom zruš starý v portáli Apple. Expo Push tokeny tvojich používateľov sa nezmenia.
Treba po zmene push kľúča spraviť nový build?
Väčšinou nie. Kľúč slúži serveru, ktorý posiela, nie nainštalovanej appke, a Expo uvádza, že nový kľúč nemení tokeny. Výnimka: ak potvrdenia hlásia InvalidProviderToken, Expo odporúča spraviť nový build s novým kľúčom a novým profilom.

