# Apple push notification certifikát: .p8, nebo .p12 s Expo

> 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.

Původní stránka: [Apple push notification certifikát: .p8, nebo .p12 s Expo](https://devoria.fr/cs/blog/apple-push-notification-certifikat-p8-p12-expo)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-11-04
Poslední revize obsahu: 2026-11-04


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](https://devoria.fr/cs/blog/ios-certifikat-vyvojare-provisioning-profile-expo) 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](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) 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](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns), ž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](https://developer.apple.com/support/expiration/) 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](https://developer.apple.com/help/account/keys/create-a-private-key): Apple ho ve tvém účtu neuchovává. Certifikát .p12 se naopak [exportuje z klíčenky Macu](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate), 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](https://docs.expo.dev/app-signing/app-credentials/) 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](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) vyhrazuje první pro testy a druhý pro publikované appky. Appka pozná, který použít, podle entitlementu `aps-environment`. [Podle Applu](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) 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](https://docs.expo.dev/versions/latest/sdk/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](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) 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](https://docs.expo.dev/push-notifications/push-notifications-setup/), 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)](https://docs.expo.dev/push-notifications/sending-notifications/) zhruba 15 minut po odeslání: tam se zobrazují chyby.
- **Entitlement nastaví plugin.** Přidej `expo-notifications` do `plugins`:

```json
{
  "expo": {
    "plugins": ["expo-notifications"]
  }
}
```

Dvě pasti. [FAQ Expo](https://docs.expo.dev/push-notifications/faq/) ří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](https://devoria.fr/cs/blog/tajny-api-klic-aplikace-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](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) 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áš](https://developer.apple.com/help/account/certificates/certificates-overview). 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](https://support.apple.com/guide/deployment/dep2de55389a) 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

1. **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í](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Získej token přímo z appky nainstalované přes TestFlight.
2. **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`.
3. **Tvůj klíč je omezený na sandbox.** Nahraď ho klíčem platným pro produkci.
4. **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](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) 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](https://docs.expo.dev/build-reference/ios-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](https://devoria.fr/cs/blog/testflight-testovani-iphone-aplikace). Pokud posíláš tiché notifikace, abys appku probudil, přečti si znovu [guideline 2.5.4 o režimech na pozadí](https://devoria.fr/cs/blog/guideline-2-5-4-rezim-na-pozadi-zamitnuti-apple). Celý postup bez Macu najdeš v článku [publikování iOS appky bez Macu](https://devoria.fr/cs/blog/publikace-ios-aplikace-bez-macu-expo-eas) a kroky vydání na stránce [publikování aplikace v App Storu](https://devoria.fr/cs/expertise/jak-vydat-aplikaci-v-app-store).

Před prvním odesláním si udělej [bezplatnou diagnostiku](https://devoria.fr/cs/diagnostic): ř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](https://devoria.fr/cs/kits/ios) 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.


## Tvůj projekt

[Review Kit](https://devoria.fr/cs/kits/app-review): Můj checklist pro review v App Store, moje opravená zamítnutí od Applu, checklist pro Google Play a tři skilly pro Claude Code. 1 199 Kč.

[iOS & Android Kit](https://devoria.fr/cs/kits/ios): Vytvoř si aplikaci pro iPhone a Android s Claude Code: startovní kód mých aplikací, cesta až do obchodů a všechny kity. 2 399 Kč.

[Diagnostika: co tě dělí od tvé iPhone aplikace](https://devoria.fr/cs/diagnostic): 7 otázek, 60 sekund: zjistíš, co ti doopravdy brání vydat iPhone aplikaci, dostaneš cestu ve 4 krocích a kit přesně pro tebe.
