# Apple push certifikat: .p8 ili .p12 s Expom

> Za push obavijesti Apple nudi .p8 ključ bez isteka za sve tvoje aplikacije ili godišnji .p12 certifikat. S Expom ključem upravlja EAS.

Izvorna stranica: [Apple push certifikat: .p8 ili .p12 s Expom](https://devoria.fr/hr/blog/apple-push-certifikat-p8-p12-expo)
Autor: [Mehdi Azizi](https://devoria.fr/hr/mehdi-azizi)
Objavljeno: 2026-11-04
Zadnja revizija sadržaja: 2026-11-04


Appleov push certifikat dopušta poslužitelju da šalje obavijesti tvojoj aplikaciji preko APNs-a, Appleove usluge za obavijesti. Postoji u dva oblika: .p12 certifikat, koji vrijedi godinu dana i vezan je uz samo jednu aplikaciju, ili .p8 ključ, koji ne istječe i služi za sve aplikacije na tvom računu. **S Expom ti certifikat ne treba: EAS ti pri prvom buildu ponudi da napraviš .p8 ključ, a Expova push usluga ga koristi umjesto tebe.**

Vodič o [developerskom certifikatu i provisioning profileu](https://devoria.fr/hr/blog/ios-developerski-certifikat-provisioning-profile-expo) spominje push ključ u nekoliko redaka. Ovdje idemo do kraja: izbor između dva formata, sandbox i production okruženja, obnavljanje i kvarovi koji gase obavijesti u TestFlightu.

Svoje aplikacije objavljujem s Expom i EAS-om. Solys i TradaZen u konfiguraciji deklariraju plugin `expo-notifications`: on priprema aplikaciju za primanje obavijesti.

## Zašto Apple traži certifikat ili ključ

Push obavijest kreće s poslužitelja, tvog ili Expovog, koji je predaje APNs-u, a on je dostavlja na iPhone. APNs zato mora provjeriti smije li taj poslužitelj pisati tvojoj aplikaciji. Apple nudi dva načina da se to dokaže.

- **Veza preko tokena, s .p8 ključem.** [Prema Appleu](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns), brža je, može se koristiti s više poslužitelja, a jedan ključ pokriva sve aplikacije tvog tima ili dio njih. Tvoj poslužitelj njime potpisuje token, koji treba obnoviti barem svakih sat vremena.
- **Veza preko certifikata, s .p12 datotekom.** [Apple navodi](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) da je taj certifikat vezan uz jednu aplikaciju i vrijedi godinu dana. Više aplikacija, više certifikata.

[Appleova stranica o isteku](https://developer.apple.com/support/expiration/) to potvrđuje: ključ za potpisivanje APNs tokena nikad ne istječe.

## Tablica .p8 / .p12

| Kriterij        | .p8 ključ              | .p12 certifikat              |
| --------------- | ---------------------- | ---------------------------- |
| Trajanje        | Ne istječe             | Godinu dana                  |
| Doseg           | Sve tvoje aplikacije   | Samo jedna aplikacija        |
| Okruženje       | Biraš ga pri izradi    | Sandbox i production         |
| Obnavljanje     | Nikakvo, osim opoziva  | Svake godine                 |
| Preuzimanje     | Samo jednom            | Izvoz s Maca                 |
| Broj            | Dva po okruženju       | Jedan po aplikaciji          |
| Uporaba s Expom | Izrađuje i vodi ga EAS | Nema ga u Expo dokumentaciji |

Tri pojašnjenja. .p8 datoteka [preuzima se samo jednom](https://developer.apple.com/help/account/keys/create-a-private-key): Apple je ne čuva na tvom računu. .p12 se pak [izvozi iz keychaina Maca](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate) koji je napravio certifikat. A ograničenje od dva ključa po okruženju vrijedi za timske ključeve. Za ključeve ograničene na određene aplikacije Apple dopušta do 200 po okruženju.

[Expova stranica o vjerodajnicama](https://docs.expo.dev/app-signing/app-credentials/) govori samo o push ključu i navodi najviše dva po računu, bez razlikovanja okruženja ili ključeva po aplikaciji. **Za Expo aplikaciju .p8 ključ je pravi izbor.**

## Sandbox i production: dva okruženja

APNs ima dva poslužitelja: development, zvan i sandbox, i production. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) prvi namjenjuje testiranju, a drugi objavljenim aplikacijama. Aplikacija zna koji koristiti zahvaljujući entitlementu `aps-environment`. [Prema Appleu](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment), njegova vrijednost prati profil potpisivanja: `development` s development profilom, `production` s distribucijskim profilom i za TestFlight.

**TestFlight build dakle razgovara s productionom, točno kao App Store.**

Na strani Expa dva detalja. [Dokumentacija za expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) kaže da je entitlement u projektu uvijek zapisan kao `development`, a u arhivi release builda prebacuje se na `production`. I pri izradi se Expo token veže uz okruženje aplikacije, koje se otkriva automatski: pri slanju ne moraš ništa birati.

Ako ključ izrađuješ sam, Apple te pita za okruženje i doseg: cijeli tim ili određene aplikacije. Njegova developerska dokumentacija sada opisuje timske ključeve ograničene na sandbox ili production, dok se stari ključevi koji vrijede svugdje i dalje prihvaćaju. [Pomoć za račun](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) pak i dalje tvrdi da ključ služi za oba okruženja. Apple sam sebi proturječi: drži se okruženja koje odabereš pri izradi. **Ključ rezerviran za sandbox neće raditi ni za TestFlight ni za App Store.**

## Kako Expo upravlja push ključem

Prema [Expovom vodiču za postavljanje](https://docs.expo.dev/push-notifications/push-notifications-setup/), ažuriranom 28. srpnja 2026., tvoj prvi development build ponudit će ti da postaviš push obavijesti i generiraš APNs ključ. Odgovori potvrdno na oboje. Bez EAS Builda pokreni `eas credentials`. Treba ti plaćeni Apple Developer račun.

Zatim:

- **EAS sprema ključ i povezuje ga s tvojom aplikacijom.** Prema Expu, jedan ključ služi za koliko god aplikacija želiš, a učitavanje novog ne mijenja Expo Push tokene tvojih korisnika.
- **Tvoj poslužitelj ne zove APNs.** Šalje Expovoj push usluzi, koja prosljeđuje APNs-u. [Expo traži da čitaš potvrde (receipts)](https://docs.expo.dev/push-notifications/sending-notifications/) otprilike 15 minuta nakon slanja: tamo se prikazuju greške.
- **Plugin postavlja entitlement.** Deklariraj `expo-notifications` u `plugins`:

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

Dvije zamke. [Expov FAQ](https://docs.expo.dev/push-notifications/faq/) kaže da Expo Go od SDK-a 53 više ne podržava push obavijesti, dok stranica za expo-notifications to navodi samo za Android. U oba slučaja Expo preporučuje development build: testiraj s njim. I brisanje ključa preko `eas credentials` uklanja ga s Expovih poslužitelja, ne s tvog Apple računa. Da oslobodiš mjesto, opozovi ga na Appleovu portalu. Kao i svaka tajna, .p8 datoteka nikad ne smije završiti u tvom repozitoriju: pravilo je isto kao za [API ključeve Expo aplikacije](https://devoria.fr/hr/blog/tajni-api-kljuc-expo-aplikacija).

## Obnavljanje: što zapravo istječe

**.p8 ključ ne treba obnavljati.** Prestaje raditi samo ako ga opozoveš. Ako misliš da je kompromitiran, [Apple savjetuje](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) da napraviš novi ključ, prebaciš se na njega i tek onda opozoveš stari. Za zamjenu ključa s Expom FAQ daje postupak: `eas credentials`, iOS, tvoj build profil, zatim uklanjanje push ključa i generiranje novog.

**.p12 certifikat istječe svake godine.** Apple traži da ga ažuriraš prije isteka i pratiš datum u keychainu. Kad istekne ili bude opozvan, [više ne možeš slati obavijesti](https://developer.apple.com/help/account/certificates/certificates-overview) svojoj aplikaciji. Apple ne opisuje zasebno obnavljanje: napraviš novi certifikat iz identifikatora aplikacije, instaliraš ga na poslužitelj prije isteka, a zatim ukloniš stari. **Najbolje obnavljanje je prijeći na ključ.**

> Upravljaš iPhoneima preko Intunea ili drugog alata za upravljanje uređajima? To nije isti certifikat. Push certifikat za upravljanje uređajima izrađuje se na Apple Push Certificates Portalu i obnavlja svake godine. [Apple savjetuje](https://support.apple.com/guide/deployment/dep2de55389a) da zapišeš koji si Apple račun koristio: trebat će ti za obnavljanje.

## Tipični kvarovi i kako ih popraviti

### Radi u developmentu, ali ne u TestFlightu

1. **Šalješ na krivi token.** TestFlight build registrira se u productionu i dobiva novi token. Token iz development builda ne radi: Apple vraća `BadDeviceToken` kad [token ne odgovara okruženju](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Uzmi token iz same TestFlight aplikacije.
2. **Production aplikacija nema push vjerodajnice.** To je dijagnoza iz Expovog FAQ-a. Provjeri stranicu s vjerodajnicama projekta na expo.dev ili `eas credentials`.
3. **Tvoj ključ je ograničen na sandbox.** Zamijeni ga ključem koji vrijedi u productionu.
4. **iPhone ne dobiva token.** Ako si TestFlight build instalirao preko Xcode builda, Expo predlaže ponovno pokretanje uređaja.

### "No valid aps-environment entitlement string found"

Prema Expovom FAQ-u, ova greška znači da za tvoj iOS projekt nije postavljen nijedan push ključ. Provjeri stranicu s vjerodajnicama, pa ponovno pokreni build: EAS će ti tada ponuditi da generiraš ključ. Provjeri i je li `expo-notifications` stvarno u `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple šalje ovaj e-mail nakon slanja: čini se da se tvoja aplikacija registrira na APNs, ali njezin potpis ne sadrži entitlement `aps-environment`. [Expova napomena o SDK-u 51](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) to objašnjava. Od tog SDK-a entitlement se dodaje samo ako je instaliran `expo-notifications`. Upozorenje dolazi iz dviju Appleovih provjera. Prva uspoređuje capabilities identifikatora tvoje aplikacije s entitlementima aplikacije. Druga u binarnoj datoteci pronalazi metodu za registraciju obavijesti, koju Expov kod sadrži u svim aplikacijama.

**To je upozorenje, ne odbijanje**, naglašava Expo. Ako koristiš obavijesti, dodaj plugin i napravi novi build: [EAS sinkronizira capabilities](https://docs.expo.dev/build-reference/ios-capabilities/) identifikatora aplikacije pri svakom buildu. Ako ne, ukloni capability Push Notifications s identifikatora na Appleovu portalu. Upozorenje može ostati, bez posljedica.

### InvalidCredentials ili sve aplikacije odjednom utihnu

`InvalidCredentials` u potvrdi znači da tvoje push vjerodajnice više nisu valjane, često zato što je ključ opozvan. Sve aplikacije koje su ga koristile utihnu istovremeno. Expovo rješenje: `eas credentials`, zatim novi ključ. Ako potvrda spominje `InvalidProviderToken`, Expo savjetuje novi build uz ponovno generiranje push ključa i profila.

## Prije nego uključiš obavijesti

Da testiraš obavijesti na svom iPhoneu prije izlaska, prati [TestFlight za testiranje aplikacije](https://devoria.fr/hr/blog/testflight-testiranje-iphone-aplikacije). Ako šalješ tihe obavijesti da probudiš aplikaciju, ponovno pročitaj [smjernicu 2.5.4 o pozadinskim načinima rada](https://devoria.fr/hr/blog/guideline-2-5-4-apple-odbija-pozadinski-nacin-rada). Cijeli lanac, bez Maca, nalazi se u [objavi iOS aplikacije bez Maca](https://devoria.fr/hr/blog/objavi-ios-aplikaciju-bez-maca-expo-eas), a koraci izlaska na stranici [objava aplikacije na App Storeu](https://devoria.fr/hr/expertise/objava-aplikacije-na-app-store).

Prije prvog slanja napravi [besplatnu dijagnostiku](https://devoria.fr/hr/diagnostic): reći će ti što blokira tvoj projekt i poslati ti moju checklistu protiv Appleovih odbijanja. Za izradu aplikacije, spajanje pretplata i objavu, [iOS & Android Kit](https://devoria.fr/hr/kits/ios) prati put u četiri koraka s početnim kodom mojih aplikacija, tvojim tempom.

## Česta pitanja

### Istječe li Appleov push certifikat?

.p12 certifikat istječe nakon godinu dana i obavijesti prestaju ako ga ne zamijeniš. .p8 ključ nikad ne istječe: prestaje raditi samo ako ga opozoveš. To je glavni razlog da odabereš ključ.

### Treba li push certifikat za svaku aplikaciju?

S .p12 certifikatom da: svaki certifikat vezan je uz jednu aplikaciju. .p8 ključ služi za sve aplikacije na tvom računu. S Expom dakle jedan ključ može pokriti cijeli tvoj katalog.

### Kako obnoviti Appleov push certifikat?

Napravi novi certifikat iz identifikatora aplikacije, s novim zahtjevom za potpisivanje, instaliraj ga na poslužitelj, pa ukloni stari. Učini to prije isteka. Najjednostavnije je prijeći na .p8 ključ, koji se ne obnavlja.

### Izgubio sam .p8 datoteku, što sad?

Apple je dopušta preuzeti samo jednom. Ako je ključ napravio EAS, Expo ga čuva i obavijesti rade dalje. Ako nije, napravi novi ključ, dodaj ga preko `eas credentials`, pa opozovi stari na Appleovu portalu. Expo Push tokeni tvojih korisnika se ne mijenjaju.

### Treba li novi build nakon promjene push ključa?

Uglavnom ne. Ključ služi poslužitelju koji šalje, ne instaliranoj aplikaciji, a Expo navodi da novi ključ ne mijenja tokene. Iznimka: ako potvrde javljaju `InvalidProviderToken`, Expo savjetuje novi build s novim ključem i novim profilom.


## Tvoj projekt

[Review Kit](https://devoria.fr/hr/kits/app-review): Moja checklista za App Store pregled, moja Appleova odbijanja i kako sam ih ispravio, checklista za Google Play i tri Claude Code skilla. 49 €.

[iOS & Android Kit](https://devoria.fr/hr/kits/ios): Napravi svoju iPhone i Android aplikaciju s Claude Codeom: početni kod mojih aplikacija, put do trgovina i svi kitovi. 99 €.

[Dijagnoza: što te dijeli od tvoje iPhone aplikacije](https://devoria.fr/hr/diagnostic): 7 pitanja, 60 sekundi: saznaj što te stvarno koči da objaviš svoju iPhone aplikaciju, dobij svoj put u 4 koraka i kit koji ti odgovara.
