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

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

Pôvodná stránka: [Apple push notification certifikát: .p8 alebo .p12 s Expo](https://devoria.fr/sk/blog/apple-push-notification-certifikat-p8-p12-expo)
Autor: [Mehdi Azizi](https://devoria.fr/sk/mehdi-azizi)
Zverejnenie: 2026-11-04
Posledná revízia obsahu: 2026-11-04


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](https://devoria.fr/sk/blog/ios-certifikat-vyvojara-provisioning-profile-expo) 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](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) 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](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns), ž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](https://developer.apple.com/support/expiration/) 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](https://developer.apple.com/help/account/keys/create-a-private-key): Apple ho v tvojom účte neuchováva. Súbor .p12 sa naopak [exportuje z kľúčenky Macu](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate), 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](https://docs.expo.dev/app-signing/app-credentials/) 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](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) vyhradzuje prvý na testy a druhý pre publikované appky. Appka vie, ktorý použiť, vďaka entitlementu `aps-environment`. [Podľa Apple](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) 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](https://docs.expo.dev/versions/latest/sdk/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](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) 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](https://docs.expo.dev/push-notifications/push-notifications-setup/), 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](https://docs.expo.dev/push-notifications/sending-notifications/) približne 15 minút po odoslaní: práve tam sa zobrazujú chyby.
- **Plugin nastaví entitlement.** Pridaj `expo-notifications` do `plugins`:

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

Dve pasce. [FAQ od Expo](https://docs.expo.dev/push-notifications/faq/) 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](https://devoria.fr/sk/blog/tajny-api-kluc-expo-aplikacia).

## Obnovovanie: čo naozaj expiruje

**Kľúč .p8 netreba obnovovať.** Prestane fungovať, iba ak ho zrušíš. Ak máš podozrenie, že je kompromitovaný, [Apple odporúča](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) 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](https://developer.apple.com/help/account/certificates/certificates-overview) 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](https://support.apple.com/guide/deployment/dep2de55389a) zapísať si použitý Apple účet: bude potrebný pri obnove.

## Typické poruchy a ich oprava

### Vo vývoji to funguje, v TestFlighte nie

1. **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](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Získaj token priamo z appky v TestFlighte.
2. **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`.
3. **Tvoj kľúč je obmedzený na sandbox.** Nahraď ho kľúčom platným v produkcii.
4. **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](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) 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](https://docs.expo.dev/build-reference/ios-capabilities/) 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](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu). Ak posielaš tiché notifikácie na prebudenie appky, prečítaj si [guideline 2.5.4 o režimoch na pozadí](https://devoria.fr/sk/blog/guideline-2-5-4-rezim-na-pozadi-zamietnutie). Celý postup bez Macu nájdeš v článku [publikovanie iOS appky bez Macu](https://devoria.fr/sk/blog/publikovanie-ios-aplikacie-bez-macu-expo-eas) a kroky vydania na stránke [publikovanie aplikácie v App Store](https://devoria.fr/sk/expertise/zverejnit-aplikaciu-v-app-store).

Pred prvým odoslaním si sprav [bezplatnú diagnostiku](https://devoria.fr/sk/diagnostic): 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](https://devoria.fr/sk/kits/ios) 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.


## Tvoj projekt

[Review Kit](https://devoria.fr/sk/kits/app-review): Môj checklist na App Store review, moje opravené zamietnutia od Apple, checklist pre Google Play a tri skilly pre Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sk/kits/ios): Vytvor si appku pre iPhone a Android s Claude Code: štartovací kód mojich appiek, cesta až do obchodov a všetky kity. 99 €.

[Diagnostika: čo ťa delí od tvojej iPhone appky](https://devoria.fr/sk/diagnostic): 7 otázok, 60 sekúnd: zistíš, čo ti naozaj bráni zverejniť tvoju iPhone appku, dostaneš cestu v 4 krokoch a kit, ktorý ti sedí.
