Apple push notification certifikát: .p8, nebo .p12 s Expo
Autor: Mehdi Azizi
Publikováno , 8 min
Pro push notifikace nabízí Apple klíč .p8 bez expirace platný pro všechny tvoje appky, nebo roční certifikát .p12. S Expo klíč spravuje EAS.
Push certifikát od Applu povoluje serveru posílat notifikace do tvé appky přes APNs, službu notifikací od Applu. Existuje ve dvou podobách: certifikát .p12, platný rok a vázaný na jedinou appku, nebo klíč .p8, který nevyprší a slouží všem appkám na tvém účtu. S Expo certifikát nepotřebuješ: EAS ti při prvním buildu nabídne vytvořit klíč .p8 a push služba Expo ho použije za tebe.
Návod o vývojářském certifikátu a provisioning profilu zmiňuje push klíč jen v pár řádcích. Tady to dotáhneme do konce: volba mezi oběma formáty, prostředí sandbox a produkce, obnova a poruchy, kvůli kterým v TestFlightu nechodí notifikace.
Svoje appky publikuju s Expo a EAS. Solys i TradaZen mají v konfiguraci plugin expo-notifications: právě ten připraví appku na příjem notifikací.
Proč Apple chce certifikát nebo klíč
Push notifikace vychází ze serveru, tvého nebo od Expo, ten ji předá APNs a APNs ji doručí do iPhonu. APNs tedy musí ověřit, že server smí tvé appce psát. Apple nabízí dva způsoby, jak to prokázat.
- Připojení přes token, s klíčem .p8. Podle Applu je rychlejší, dá se použít z více serverů a jeden klíč pokryje všechny appky tvého týmu nebo jejich část. Tvůj server s ním podepisuje token, který je potřeba obnovit aspoň jednou za hodinu.
- Připojení přes certifikát, se souborem .p12. Apple upřesňuje, že tenhle certifikát je vázaný na jedinou appku a platí rok. Víc appek, víc certifikátů.
Stránka Applu o expiracích to připomíná: podpisový klíč tokenů APNs nikdy nevyprší.
Tabulka .p8 / .p12
| Kritérium | Klíč .p8 | Certifikát .p12 |
|---|---|---|
| Platnost | Bez expirace | Jeden rok |
| Rozsah | Všechny tvoje appky | Jedna appka |
| Prostředí | Volí se při vytvoření | Sandbox i produkce |
| Obnova | Žádná, kromě zneplatnění | Každý rok |
| Stažení | Jen jednou | Export z Macu |
| Počet | Dva na prostředí | Jeden na appku |
| Použití s Expo | Vytvoří a spravuje EAS | V dokumentaci Expo chybí |
Tři upřesnění. Soubor .p8 se dá stáhnout jen jednou: Apple ho ve tvém účtu neuchovává. Certifikát .p12 se naopak exportuje z klíčenky Macu, na kterém certifikát vznikl. A limit dvou klíčů na prostředí platí pro týmové klíče. U klíčů omezených na konkrétní appky jich Apple povoluje až 200 na prostředí.
Stránka Expo o přihlašovacích údajích mluví jen o push klíči a počítá maximálně se dvěma na účet, bez rozlišení prostředí nebo klíčů pro jednotlivé appky. Pro appku v Expo je klíč .p8 správná volba.
Sandbox a produkce: dvě prostředí
APNs má dva servery: vývojový, kterému se říká taky sandbox, a produkční. Apple vyhrazuje první pro testy a druhý pro publikované appky. Appka pozná, který použít, podle entitlementu aps-environment. Podle Applu se jeho hodnota řídí podpisovým profilem: development s vývojovým profilem, production s distribučním profilem a pro TestFlight.
Build v TestFlightu tedy komunikuje s produkcí, úplně stejně jako App Store.
Na straně Expo dva detaily. Dokumentace expo-notifications uvádí, že entitlement je v projektu vždy zapsaný jako development a v archivu release buildu se přepne na production. A Expo token se při vytvoření přiřadí k prostředí appky, které se detekuje automaticky: při odesílání nic nevybíráš.
Když si klíč vytváříš sám, Apple se zeptá na jeho prostředí a rozsah: celý tým, nebo jen některé appky. Jeho vývojářská dokumentace teď popisuje týmové klíče omezené na sandbox nebo produkci, přičemž starší klíče platné všude zůstávají přijímané. Nápověda k účtu ale pořád tvrdí, že klíč slouží pro obě prostředí. Apple si odporuje: drž se prostředí, které zvolíš při vytvoření. Klíč vyhrazený pro sandbox nebude fungovat ani v TestFlightu, ani v App Storu.
Jak Expo spravuje push klíč
Podle konfiguračního návodu Expo, aktualizovaného 28. července 2026, ti první vývojový build nabídne nastavit push notifikace a vygenerovat APNs klíč. Na obojí odpověz ano. Bez EAS Build spusť eas credentials. Potřebuješ placený účet Apple Developer.
Pak:
- EAS klíč uloží a přiřadí ho k tvé appce. Podle Expo jeden klíč poslouží libovolnému počtu appek a nahrání nového nezmění Expo Push tokeny tvých uživatelů.
- Tvůj server nevolá APNs. Posílá do push služby Expo, která to předá APNs. Expo po tobě chce číst potvrzení (receipts) zhruba 15 minut po odeslání: tam se zobrazují chyby.
- Entitlement nastaví plugin. Přidej
expo-notificationsdoplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Dvě pasti. FAQ Expo říká, že Expo Go od SDK 53 push notifikace nepodporuje, zatímco stránka expo-notifications mluví jen o Androidu. V obou případech Expo doporučuje vývojový build: testuj s ním. A smazání klíče přes eas credentials ho odstraní ze serverů Expo, ne z tvého účtu u Applu. Pokud chceš uvolnit místo, zneplatni ho v portálu Applu. Jako každé tajemství nesmí soubor .p8 nikdy skončit ve tvém repozitáři: platí stejné pravidlo jako pro API klíče v appce Expo.
Obnova: co doopravdy vyprší
Klíč .p8 není potřeba obnovovat. Přestane fungovat, jen když ho zneplatníš. Pokud máš podezření, že unikl, Apple doporučuje vytvořit nový klíč, přepnout se na něj a teprve potom ten starý zneplatnit. Jak klíč v Expo vyměnit, popisuje FAQ: eas credentials, iOS, tvůj build profil, pak odebrat push klíč a vygenerovat nový.
Certifikát .p12 každý rok vyprší. Apple chce, abys ho aktualizoval před koncem platnosti a hlídal si datum v klíčence. Jakmile vyprší nebo je zneplatněný, už do své appky notifikace neposíláš. Apple samostatnou obnovu nepopisuje: vytvoříš nový certifikát z identifikátoru appky, nainstaluješ ho na server před koncem platnosti a pak odebereš starý. Nejlepší obnova je přejít na klíč.
Spravuješ iPhony přes Intune nebo jiný nástroj pro správu zařízení? To je jiný certifikát. Push certifikát pro správu zařízení se vytváří na Apple Push Certificates Portal a obnovuje se každý rok. Apple doporučuje si poznamenat použitý Apple účet: bude potřeba při obnově.
Typické poruchy a jak je opravit
Ve vývoji to funguje, v TestFlightu ne
- Posíláš na špatný token. Build z TestFlightu se registruje v produkci a dostane nový token. Token z vývojového buildu nefunguje: Apple odpoví
BadDeviceToken, když token neodpovídá prostředí. Získej token přímo z appky nainstalované přes TestFlight. - Produkční appka nemá push přihlašovací údaje. To je diagnóza z FAQ Expo. Zkontroluj stránku přihlašovacích údajů projektu na expo.dev nebo
eas credentials. - Tvůj klíč je omezený na sandbox. Nahraď ho klíčem platným pro produkci.
- iPhone nedostane token. Pokud jsi build z TestFlightu nainstaloval přes build z Xcode, Expo radí zařízení restartovat.
„No valid aps-environment entitlement string found“
Podle FAQ Expo tahle chyba znamená, že pro tvůj iOS projekt není nastavený žádný push klíč. Zkontroluj stránku přihlašovacích údajů a spusť nový build: EAS ti pak nabídne klíč vygenerovat. Ověř taky, že expo-notifications opravdu je v plugins.
ITMS-90078: Missing Push Notification Entitlement
Tenhle e-mail ti Apple pošle po odeslání buildu: tvoje appka se zřejmě registruje u APNs, ale její podpis neobsahuje entitlement aps-environment. Poznámka Expo k SDK 51 to vysvětluje. Od tohohle SDK se entitlement přidá, jen když je nainstalovaný expo-notifications. Varování vzniká ze dvou kontrol Applu. První porovnává capabilities tvého identifikátoru appky s entitlementy appky. Druhá hledá v binárce metodu pro registraci k notifikacím, kterou kód Expo obsahuje ve všech appkách.
Je to varování, ne zamítnutí, upřesňuje Expo. Pokud notifikace používáš, přidej plugin a udělej nový build: EAS synchronizuje capabilities identifikátoru appky při každém buildu. Jinak odeber capability Push Notifications ze svého identifikátoru v portálu Applu. Varování může přetrvávat, bez následků.
InvalidCredentials nebo všechny appky najednou ztichnou
InvalidCredentials v potvrzení znamená, že tvoje push přihlašovací údaje už neplatí, často proto, že byl klíč zneplatněný. Všechny appky, které ho používaly, ztichnou současně. Oprava podle Expo: eas credentials a pak nový klíč. Pokud potvrzení uvádí InvalidProviderToken, Expo radí udělat nový build a přitom znovu vygenerovat push klíč i profil.
Než zapneš notifikace
Pokud chceš notifikace otestovat na svém iPhonu před vydáním, projdi si TestFlight pro testování appky. Pokud posíláš tiché notifikace, abys appku probudil, přečti si znovu guideline 2.5.4 o režimech na pozadí. Celý postup bez Macu najdeš v článku publikování iOS appky bez Macu a kroky vydání na stránce publikování aplikace v App Storu.
Před prvním odesláním si udělej bezplatnou diagnostiku: řekne ti, co ve tvém projektu blokuje, a pošle ti můj checklist proti zamítnutí od Applu. Na stavbu appky, napojení předplatného a publikaci tě iOS & Android Kit provede ve čtyřech krocích se startovním kódem mých appek, vlastním tempem.
Časté dotazy
Vyprší push certifikát od Applu?
Certifikát .p12 vyprší po roce a když ho nenahradíš, notifikace přestanou chodit. Klíč .p8 nevyprší nikdy: přestane fungovat, jen když ho zneplatníš. To je hlavní důvod dát přednost klíči.
Potřebuju push certifikát pro každou appku?
S certifikátem .p12 ano: každý certifikát je vázaný na jedinou appku. Klíč .p8 slouží všem appkám na tvém účtu. S Expo tak jeden klíč pokryje celý tvůj katalog.
Jak obnovit push certifikát od Applu?
Vytvoř nový certifikát z identifikátoru appky s novou žádostí o podpis, nainstaluj ho na server a pak odeber starý. Udělej to před koncem platnosti. Nejjednodušší je přejít na klíč .p8, který se neobnovuje.
Ztratil jsem soubor .p8, co teď?
Apple ho dovolí stáhnout jen jednou. Pokud klíč vytvořil EAS, Expo ho má uložený a notifikace fungují dál. Jinak vytvoř nový klíč, přidej ho přes eas credentials a pak starý zneplatni v portálu Applu. Expo Push tokeny tvých uživatelů se nezmění.
Musím po výměně push klíče udělat nový build?
Obecně ne. Klíč slouží serveru, který posílá, ne nainstalované appce, a Expo uvádí, že nový klíč tokeny nemění. Výjimka: pokud potvrzení hlásí InvalidProviderToken, Expo radí udělat nový build s novým klíčem a novým profilem.

