# Apple push-sertifikaatti: .p8 vai .p12 Expolla

> Apple tarjoaa push-ilmoituksiin .p8-avaimen, joka ei vanhene, tai vuoden voimassa olevan .p12-sertifikaatin. Expossa EAS hoitaa avaimen.

Alkuperäinen sivu: [Apple push-sertifikaatti: .p8 vai .p12 Expolla](https://devoria.fr/fi/blog/apple-push-sertifikaatti-p8-p12-expo)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-11-04
Sisältö tarkistettu viimeksi: 2026-11-04


Applen push-sertifikaatti antaa palvelimelle luvan lähettää ilmoituksia sovellukseesi APNs:n eli Applen ilmoituspalvelun kautta. Sitä on kahta muotoa: .p12-sertifikaatti, joka on voimassa vuoden ja sidottu yhteen sovellukseen, tai .p8-avain, joka ei vanhene ja käy kaikkiin tilisi sovelluksiin. **Expon kanssa et tarvitse sertifikaattia: EAS tarjoutuu luomaan .p8-avaimen ensimmäisessä buildissa, ja Expon push-palvelu käyttää sitä puolestasi.**

Opas [kehittäjäsertifikaatista ja provisioning profilesta](https://devoria.fr/fi/blog/ios-kehittajavarmenne-provisioning-profile-expo) mainitsee push-avaimen muutamalla rivillä. Tässä mennään loppuun asti: valinta kahden muodon välillä, sandbox- ja tuotantoympäristöt, uusiminen ja viat, jotka katkaisevat ilmoitukset TestFlightissa.

Julkaisen sovellukseni Expolla ja EAS:llä. Solys ja TradaZen määrittelevät konfiguraatiossaan `expo-notifications`-pluginin: se valmistelee sovelluksen vastaanottamaan ilmoituksia.

## Miksi Apple vaatii sertifikaatin tai avaimen

Push-ilmoitus lähtee palvelimelta, omaltasi tai Expon, joka antaa sen APNs:lle, joka toimittaa sen iPhoneen. APNs:n täytyy siis tarkistaa, että palvelimella on oikeus kirjoittaa sovelluksellesi. Apple tarjoaa kaksi tapaa todistaa se.

- **Token-pohjainen yhteys .p8-avaimella.** [Applen mukaan](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) se on nopeampi, sitä voi käyttää useilta palvelimilta, ja sama avain kattaa kaikki tiimisi sovellukset tai osan niistä. Palvelimesi allekirjoittaa sillä tokenin, joka pitää tehdä uudelleen vähintään tunnin välein.
- **Sertifikaattipohjainen yhteys .p12-tiedostolla.** [Apple täsmentää](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns), että sertifikaatti on sidottu yhteen sovellukseen ja voimassa vuoden. Useampi sovellus, useampi sertifikaatti.

[Applen vanhenemissivu](https://developer.apple.com/support/expiration/) muistuttaa: APNs-tokenien allekirjoitusavain ei vanhene koskaan.

## Taulukko .p8 / .p12

| Kriteeri       | .p8-avain                    | .p12-sertifikaatti             |
| -------------- | ---------------------------- | ------------------------------ |
| Kesto          | Ei vanhene                   | Vuosi                          |
| Kattavuus      | Kaikki sovelluksesi          | Yksi sovellus                  |
| Ympäristö      | Valitaan luotaessa           | Sandbox ja tuotanto            |
| Uusiminen      | Ei mitään, paitsi mitätöinti | Joka vuosi                     |
| Lataus         | Vain kerran                  | Vienti Macilta                 |
| Määrä          | Kaksi per ympäristö          | Yksi per sovellus              |
| Käyttö Expossa | EAS luo ja hallinnoi         | Puuttuu Expon dokumentaatiosta |

Kolme tarkennusta. .p8-tiedoston [voi ladata vain kerran](https://developer.apple.com/help/account/keys/create-a-private-key): Apple ei säilytä sitä tililläsi. .p12 taas [viedään sen Macin avainnipusta](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate), jolla sertifikaatti luotiin. Ja kahden avaimen raja per ympäristö koskee tiimiavaimia. Tiettyihin sovelluksiin rajattuja avaimia Apple sallii jopa 200 per ympäristö.

[Expon tunnistesivu](https://docs.expo.dev/app-signing/app-credentials/) puhuu vain push-avaimesta ja sallii enintään kaksi per tili erottelematta ympäristöjä tai sovelluskohtaisia avaimia. **Expo-sovellukselle .p8-avain on oikea valinta.**

## Sandbox ja tuotanto: kaksi ympäristöä

APNs:llä on kaksi palvelinta: kehitys eli sandbox, ja tuotanto. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) varaa ensimmäisen testaukseen ja toisen julkaistuille sovelluksille. Sovellus tietää kumpaa käyttää `aps-environment`-entitlementin ansiosta. [Applen mukaan](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) sen arvo seuraa allekirjoitusprofiilia: `development` kehitysprofiililla, `production` jakeluprofiililla ja TestFlightissa.

**TestFlight-build puhuu siis tuotannolle, täsmälleen kuten App Store.**

Expon puolella kaksi yksityiskohtaa. [expo-notificationsin dokumentaatio](https://docs.expo.dev/versions/latest/sdk/notifications/) kertoo, että entitlement kirjoitetaan projektiin aina arvolla `development` ja vaihdetaan arvoon `production` release-buildin arkistossa. Ja luotaessa Expo-token sidotaan sovelluksen ympäristöön, joka tunnistetaan automaattisesti: sinun ei tarvitse valita mitään lähettäessä.

Jos luot avaimen itse, Apple kysyy sen ympäristön ja kattavuuden: koko tiimi tai tietyt sovellukset. Sen kehittäjädokumentaatio kuvaa nykyään sandboxiin tai tuotantoon rajattuja tiimiavaimia, ja vanhat kaikkialla toimivat avaimet hyväksytään edelleen. [Tilin ohjeet](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) taas väittävät yhä, että avain käy molempiin ympäristöihin. Apple on ristiriidassa itsensä kanssa: muista ympäristö, jonka valitset luotaessa. **Sandboxiin rajattu avain ei toimi TestFlightissa eikä App Storessa.**

## Miten Expo hallinnoi push-avainta

[Expon asennusoppaan](https://docs.expo.dev/push-notifications/push-notifications-setup/) mukaan (päivitetty 28. heinäkuuta 2026) ensimmäinen kehitysbuildisi tarjoaa push-ilmoitusten määrittämistä ja APNs-avaimen luomista. Vastaa kumpaankin kyllä. Ilman EAS Buildia aja `eas credentials`. Tarvitset maksullisen Apple Developer -tilin.

Sen jälkeen:

- **EAS tallentaa avaimen ja liittää sen sovellukseesi.** Expon mukaan yksi avain käy niin moneen sovellukseen kuin haluat, eikä uuden lataaminen muuta käyttäjiesi Expo Push -tokeneita.
- **Palvelimesi ei kutsu APNs:ää.** Se lähettää Expon push-palveluun, joka välittää APNs:lle. [Expo pyytää lukemaan kuittaukset](https://docs.expo.dev/push-notifications/sending-notifications/) noin 15 minuuttia lähetyksen jälkeen: niissä virheet näkyvät.
- **Plugin lisää entitlementin.** Määrittele `expo-notifications` kohtaan `plugins`:

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

Kaksi sudenkuoppaa. [Expon FAQ](https://docs.expo.dev/push-notifications/faq/) sanoo, ettei Expo Go tue push-ilmoituksia SDK 53:sta lähtien, kun taas expo-notificationsin sivu koskee vain Androidia. Kummassakin tapauksessa Expo suosittelee kehitysbuildia: testaa sillä. Ja avaimen poistaminen `eas credentials` -komennolla poistaa sen Expon palvelimilta, ei Apple-tililtäsi. Vapauttaaksesi paikan mitätöi se Applen portaalissa. Kuten mikä tahansa salaisuus, .p8-tiedosto ei saa koskaan päätyä repoosi: sääntö on sama kuin [Expo-sovelluksen API-avaimille](https://devoria.fr/fi/blog/salainen-api-avain-expo-sovellus).

## Uusiminen: mikä oikeasti vanhenee

**.p8-avaimessa ei ole mitään uusittavaa.** Se lakkaa toimimasta vain, jos mitätöit sen. Jos epäilet sen vuotaneen, [Apple neuvoo](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) luomaan uuden avaimen, siirtymään siihen ja vasta sitten mitätöimään vanhan. Avaimen vaihtamiseen Expossa FAQ antaa ohjeet: `eas credentials`, iOS, build-profiilisi, sitten push-avaimen poisto ja uuden luonti.

**.p12-sertifikaatti vanhenee joka vuosi.** Apple pyytää päivittämään sen ennen eräpäivää ja seuraamaan päivämäärää avainnipussa. Kun se on vanhentunut tai mitätöity, [et voi enää lähettää ilmoituksia](https://developer.apple.com/help/account/certificates/certificates-overview) sovellukseesi. Apple ei kuvaa erillistä uusimista: luot uuden sertifikaatin sovelluksen tunnisteesta, asennat sen palvelimellesi ennen eräpäivää ja poistat vanhan. **Paras uusiminen on siirtyä avaimeen.**

> Hallinnoitko iPhoneja Intunella tai muulla laitehallintatyökalulla? Se ei ole sama sertifikaatti. Laitehallinnan push-sertifikaatti luodaan Apple Push Certificates Portalissa ja uusitaan joka vuosi. [Apple neuvoo](https://support.apple.com/guide/deployment/dep2de55389a) kirjaamaan ylös käytetyn Apple-tilin: sitä tarvitaan uusimiseen.

## Tyypilliset viat ja korjaukset

### Toimii kehityksessä, ei TestFlightissa

1. **Lähetät väärään tokeniin.** TestFlight-build rekisteröityy tuotantoon ja saa uuden tokenin. Kehitysbuildin token ei toimi: Apple vastaa `BadDeviceToken`, kun [token ei vastaa ympäristöä](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Hae token itse TestFlight-sovelluksesta.
2. **Tuotantosovelluksella ei ole push-tunnisteita.** Tämä on Expon FAQ:n diagnoosi. Tarkista projektin tunnistesivu expo.devissä tai `eas credentials`.
3. **Avaimesi on rajattu sandboxiin.** Korvaa se tuotannossa toimivalla avaimella.
4. **iPhone ei saa tokenia.** Jos asensit TestFlight-buildin Xcode-buildin päälle, Expo ehdottaa laitteen uudelleenkäynnistystä.

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

Expon FAQ:n mukaan tämä virhe tarkoittaa, ettei iOS-projektillesi ole määritetty push-avainta. Tarkista tunnistesivu ja tee uusi build: EAS tarjoutuu silloin luomaan avaimen. Tarkista myös, että `expo-notifications` on kohdassa `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple lähettää tämän sähköpostin lähetyksen jälkeen: sovelluksesi näyttää rekisteröityvän APNs:ään, mutta sen allekirjoituksessa ei ole `aps-environment`-entitlementtiä. [Expon SDK 51 -muistio](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) selittää sen. Tästä SDK:sta lähtien entitlement lisätään vain, jos `expo-notifications` on asennettu. Varoitus johtuu kahdesta Applen tarkistuksesta. Ensimmäinen vertaa sovellustunnisteesi ominaisuuksia sovelluksen entitlementteihin. Toinen löytää binääristä ilmoituksiin rekisteröitymisen metodin, joka on Expon koodissa kaikissa sovelluksissa.

**Se on varoitus, ei hylkäys**, Expo täsmentää. Jos käytät ilmoituksia, lisää plugin ja tee uusi build: [EAS synkronoi sovellustunnisteen ominaisuudet](https://docs.expo.dev/build-reference/ios-capabilities/) jokaisessa buildissa. Muuten poista Push Notifications -ominaisuus tunnisteestasi Applen portaalissa. Varoitus voi jäädä näkyviin ilman seurauksia.

### InvalidCredentials tai kaikki sovellukset hiljaa kerralla

`InvalidCredentials` kuittauksessa tarkoittaa, etteivät push-tunnisteesi ole enää voimassa, usein koska avain on mitätöity. Kaikki sitä käyttäneet sovellukset hiljenevät samaan aikaan. Expon korjaus: `eas credentials` ja uusi avain. Jos kuittauksessa mainitaan `InvalidProviderToken`, Expo neuvoo tekemään uuden buildin ja luomaan push-avaimen ja profiilin uudelleen.

## Ennen kuin otat ilmoitukset käyttöön

Testataksesi ilmoituksia iPhonellasi ennen julkaisua seuraa ohjetta [TestFlight sovelluksen testaamiseen](https://devoria.fr/fi/blog/testflight-testaa-iphone-sovellus-ennen-lahetysta). Jos lähetät hiljaisia ilmoituksia herättääksesi sovelluksen, lue uudelleen [ohje 2.5.4 taustatiloista](https://devoria.fr/fi/blog/guideline-2-5-4-apple-hylkasi-taustatilan). Koko ketju ilman Macia on oppaassa [iOS-sovelluksen julkaisu ilman Macia](https://devoria.fr/fi/blog/ios-sovellus-julkaisu-ilman-macia-expo-eas), ja julkaisun vaiheet sivulla [sovelluksen julkaisu App Storeen](https://devoria.fr/fi/expertise/julkaise-sovellus-app-storeen).

Ennen ensimmäistä lähetystä tee [ilmainen diagnoosi](https://devoria.fr/fi/diagnostic): se kertoo, mikä projektissasi jumittaa, ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen. Sovelluksen rakentamiseen, tilausten kytkemiseen ja julkaisuun [iOS & Android Kit](https://devoria.fr/fi/kits/ios) kulkee neljän vaiheen polun sovellusteni aloituskoodin kanssa, omaan tahtiisi.

## Usein kysytyt kysymykset

### Vanheneeko Applen push-sertifikaatti?

.p12-sertifikaatti vanhenee vuoden kuluttua, ja ilmoituksesi loppuvat, jos sitä ei korvata. .p8-avain ei vanhene koskaan: se lakkaa toimimasta vain, jos mitätöit sen. Se on tärkein syy suosia avainta.

### Tarvitaanko push-sertifikaatti jokaiselle sovellukselle?

.p12-sertifikaatilla kyllä: jokainen sertifikaatti on sidottu yhteen sovellukseen. .p8-avain käy kaikkiin tilisi sovelluksiin. Expon kanssa yksi avain voi siis kattaa koko valikoimasi.

### Miten Applen push-sertifikaatti uusitaan?

Luo uusi sertifikaatti sovelluksesi tunnisteesta uudella allekirjoituspyynnöllä, asenna se palvelimellesi ja poista vanha. Tee se ennen eräpäivää. Helpointa on siirtyä .p8-avaimeen, jota ei uusita.

### Hukkasin .p8-tiedostoni, mitä teen?

Apple sallii sen lataamisen vain kerran. Jos EAS loi avaimen, Expo säilyttää sen ja ilmoituksesi jatkuvat. Muuten luo uusi avain, lisää se `eas credentials` -komennolla ja mitätöi vanha Applen portaalissa. Käyttäjiesi Expo Push -tokenit eivät muutu.

### Pitääkö tehdä uusi build push-avaimen vaihdon jälkeen?

Yleensä ei. Avainta käyttää lähettävä palvelin, ei asennettu sovellus, ja Expon mukaan uusi avain ei muuta tokeneita. Poikkeus: jos kuittaukset ilmoittavat `InvalidProviderToken`, Expo neuvoo tekemään uuden buildin uudella avaimella ja uudella profiililla.


## Projektisi

[Review Kit](https://devoria.fr/fi/kits/app-review): App Store -tarkastuksen tarkistuslistani, korjatut Applen hylkäykseni, Google Playn lista ja kolme Claude Code -skilliä. 49 €.

[iOS & Android Kit](https://devoria.fr/fi/kits/ios): Tee iPhone- ja Android-sovelluksesi Claude Codella: sovellusteni pohjakoodi, polku kauppoihin asti ja kaikki kitit. 99 €.

[Diagnoosi: mikä erottaa sinut omasta iPhone-sovelluksestasi](https://devoria.fr/fi/diagnostic): 7 kysymystä, 60 sekuntia: tiedät, mikä oikeasti estää sinua julkaisemasta iPhone-sovellustasi, saat 4 vaiheen polkusi ja sinulle sopivan kitin.
