# Apple push-certifikat: .p8 eller .p12 med Expo

> Til push-notifikationer tilbyder Apple en .p8-nøgle uden udløb til alle dine apps eller et .p12-certifikat, der gælder et år. Med Expo håndterer EAS nøglen.

Original side: [Apple push-certifikat: .p8 eller .p12 med Expo](https://devoria.fr/da/blog/apple-push-certifikat-p8-p12-expo)
Forfatter: [Mehdi Azizi](https://devoria.fr/da/mehdi-azizi)
Udgivet: 2026-11-04
Indhold senest revideret: 2026-11-04


Apples push-certifikat giver en server lov til at sende notifikationer til din app via APNs, Apples notifikationstjeneste. Det findes i to former: et .p12-certifikat, der gælder i et år og er knyttet til én app, eller en .p8-nøgle, der ikke udløber og kan bruges til alle apps på din konto. **Med Expo har du ikke brug for certifikatet: EAS tilbyder at oprette en .p8-nøgle ved dit første build, og Expos push-tjeneste bruger den for dig.**

Guiden om [udviklercertifikatet og provisioning profile](https://devoria.fr/da/blog/ios-udviklercertifikat-provisioning-profile-expo) nævner push-nøglen på et par linjer. Her går vi hele vejen: valget mellem de to formater, sandbox- og produktionsmiljøerne, fornyelsen og de fejl, der stopper notifikationerne i TestFlight.

Jeg udgiver mine apps med Expo og EAS. Solys og TradaZen deklarerer pluginet `expo-notifications` i deres konfiguration: det er det, der gør appen klar til at modtage notifikationer.

## Hvorfor Apple kræver et certifikat eller en nøgle

En push-notifikation starter på en server, din egen eller Expos, som giver den videre til APNs, som leverer den til iPhonen. APNs skal altså tjekke, at serveren har lov til at skrive til din app. Apple tilbyder to måder at bevise det på.

- **Token-baseret forbindelse med en .p8-nøgle.** [Ifølge Apple](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) er den hurtigere, kan bruges fra flere servere, og én nøgle dækker alle dit teams apps eller en del af dem. Din server signerer et token med den, og det skal laves om mindst én gang i timen.
- **Certifikatbaseret forbindelse med en .p12-fil.** [Apple præciserer](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns), at certifikatet er knyttet til én app og gælder i et år. Flere apps, flere certifikater.

[Apples side om udløb](https://developer.apple.com/support/expiration/) minder om det: nøglen til signering af APNs-tokens udløber aldrig.

## Tabellen .p8 / .p12

| Kriterie      | .p8-nøgle                     | .p12-certifikat                  |
| ------------- | ----------------------------- | -------------------------------- |
| Varighed      | Udløber ikke                  | Et år                            |
| Rækkevidde    | Alle dine apps                | Én app                           |
| Miljø         | Vælges ved oprettelse         | Sandbox og produktion            |
| Fornyelse     | Ingen, medmindre tilbagekaldt | Hvert år                         |
| Download      | Kun én gang                   | Eksport fra Mac'en               |
| Antal         | To pr. miljø                  | Ét pr. app                       |
| Brug med Expo | Oprettet og styret af EAS     | Ikke nævnt i Expos dokumentation |

Tre præciseringer. .p8-filen [kan kun downloades én gang](https://developer.apple.com/help/account/keys/create-a-private-key): Apple gemmer den ikke på din konto. .p12-filen [eksporteres fra nøgleringen på den Mac](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate), der oprettede certifikatet. Og grænsen på to nøgler pr. miljø gælder team-nøgler. For nøgler, der er begrænset til bestemte apps, tillader Apple op til 200 pr. miljø.

[Expos side om credentials](https://docs.expo.dev/app-signing/app-credentials/) taler kun om push-nøglen og angiver højst to pr. konto, uden at skelne mellem miljøer eller nøgler pr. app. **Til en Expo-app er .p8-nøglen det rigtige valg.**

## Sandbox og produktion: to miljøer

APNs har to servere: udvikling, også kaldet sandbox, og produktion. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) reserverer den første til test og den anden til udgivne apps. Appen ved, hvilken den skal bruge, takket være entitlementet `aps-environment`. [Ifølge Apple](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) følger værdien signeringsprofilen: `development` med en udviklingsprofil, `production` med en distributionsprofil og til TestFlight.

**Et TestFlight-build taler altså med produktion, præcis ligesom App Store.**

På Expo-siden er der to detaljer. [Dokumentationen til expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) angiver, at entitlementet altid skrives som `development` i projektet og derefter ændres til `production` i arkivet for et release-build. Og når Expo-tokenet oprettes, knyttes det til appens miljø, som registreres automatisk: du skal ikke vælge noget, når du sender.

Hvis du selv opretter nøglen, spørger Apple om dens miljø og rækkevidde: hele teamet eller bestemte apps. Apples udviklerdokumentation beskriver nu team-nøgler, der er begrænset til sandbox eller produktion, mens de gamle nøgler, der gælder overalt, stadig accepteres. [Kontohjælpen](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) påstår derimod stadig, at nøglen bruges til begge miljøer. Apple modsiger sig selv: hold dig til det miljø, du vælger ved oprettelsen. **En nøgle, der kun gælder sandbox, virker hverken til TestFlight eller App Store.**

## Sådan håndterer Expo push-nøglen

Ifølge [Expos opsætningsguide](https://docs.expo.dev/push-notifications/push-notifications-setup/), opdateret 28. juli 2026, tilbyder dit første udviklingsbuild at konfigurere push-notifikationer og generere en APNs-nøgle. Svar ja til begge. Uden EAS Build kører du `eas credentials`. Du skal have en betalt Apple Developer-konto.

Derefter:

- **EAS gemmer nøglen og knytter den til din app.** Ifølge Expo kan én nøgle bruges til lige så mange apps, du vil, og at uploade en ny ændrer ikke dine brugeres Expo Push-tokens.
- **Din server kalder ikke APNs.** Den sender til Expos push-tjeneste, som sender videre til APNs. [Expo beder dig læse kvitteringerne](https://docs.expo.dev/push-notifications/sending-notifications/) cirka 15 minutter efter afsendelsen: det er der, fejlene vises.
- **Pluginet sætter entitlementet.** Deklarér `expo-notifications` i `plugins`:

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

To faldgruber. [Expos FAQ](https://docs.expo.dev/push-notifications/faq/) siger, at Expo Go ikke længere understøtter push-notifikationer siden SDK 53, mens siden om expo-notifications kun nævner Android. Uanset hvad anbefaler Expo et udviklingsbuild: test med det. Og når du sletter nøglen med `eas credentials`, fjernes den fra Expos servere, ikke fra din Apple-konto. For at frigøre en plads skal du tilbagekalde den i Apples portal. Som enhver hemmelighed må .p8-filen aldrig ende i dit repository: reglen er den samme som for [API-nøgler i en Expo-app](https://devoria.fr/da/blog/hemmelig-api-noegle-expo-app).

## Fornyelse: hvad der faktisk udløber

**.p8-nøglen skal ikke fornyes.** Den stopper kun, hvis du tilbagekalder den. Hvis du tror, den er kompromitteret, [anbefaler Apple](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) at oprette en ny nøgle, skifte over til den og først derefter tilbagekalde den gamle. For at udskifte nøglen med Expo giver FAQ'en fremgangsmåden: `eas credentials`, iOS, din build-profil, og så fjerner du push-nøglen og genererer en ny.

**.p12-certifikatet udløber hvert år.** Apple beder dig opdatere det før udløbet og holde øje med datoen i nøgleringen. Når det er udløbet eller tilbagekaldt, [kan du ikke længere sende notifikationer](https://developer.apple.com/help/account/certificates/certificates-overview) til din app. Apple beskriver ikke en separat fornyelse: du opretter et nyt certifikat fra appens identifier, installerer det på din server før udløbet og fjerner så det gamle. **Den bedste fornyelse er stadig at skifte til nøglen.**

> Administrerer du iPhones med Intune eller et andet værktøj til enhedsadministration? Det er ikke det samme certifikat. Push-certifikatet til enhedsadministration oprettes på Apple Push Certificates Portal og fornyes hvert år. [Apple anbefaler](https://support.apple.com/guide/deployment/dep2de55389a) at notere, hvilken Apple-konto du brugte: den skal bruges til fornyelsen.

## Typiske fejl og hvordan du retter dem

### Det virker i udvikling, men ikke i TestFlight

1. **Du sender til det forkerte token.** TestFlight-buildet registrerer sig i produktion og får et nyt token. Et token fra dit udviklingsbuild virker ikke: Apple svarer `BadDeviceToken`, når [tokenet ikke passer til miljøet](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Hent tokenet fra selve TestFlight-appen.
2. **Produktionsappen har ingen push-credentials.** Det er diagnosen i Expos FAQ. Tjek projektets credentials-side på expo.dev eller `eas credentials`.
3. **Din nøgle er begrænset til sandbox.** Udskift den med en nøgle, der gælder i produktion.
4. **iPhonen får ikke noget token.** Hvis du har installeret TestFlight-buildet oven på et Xcode-build, foreslår Expo, at du genstarter enheden.

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

Ifølge Expos FAQ betyder denne fejl, at der ikke er konfigureret nogen push-nøgle til dit iOS-projekt. Tjek credentials-siden, og kør så et nyt build: EAS tilbyder da at generere nøglen. Tjek også, at `expo-notifications` står i `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple sender denne e-mail efter upload: din app ser ud til at registrere sig hos APNs, men signaturen indeholder ikke entitlementet `aps-environment`. [Expos note om SDK 51](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) forklarer det. Siden det SDK tilføjes entitlementet kun, hvis `expo-notifications` er installeret. Advarslen kommer fra to tjek hos Apple. Det første sammenligner capabilities på dit app-identifier med appens entitlements. Det andet finder en metode til registrering af notifikationer i binærfilen, og den findes i Expos kode i alle apps.

**Det er en advarsel, ikke en afvisning**, understreger Expo. Hvis du bruger notifikationer, tilføjer du pluginet og laver et nyt build: [EAS synkroniserer capabilities](https://docs.expo.dev/build-reference/ios-capabilities/) på app-identifieret ved hvert build. Ellers fjerner du capabilityen Push Notifications fra dit identifier i Apples portal. Advarslen kan blive ved med at komme, uden konsekvenser.

### InvalidCredentials, eller alle apps tavse på én gang

`InvalidCredentials` i en kvittering betyder, at dine push-credentials ikke længere er gyldige, ofte fordi nøglen er blevet tilbagekaldt. Alle apps, der brugte den, bliver tavse samtidig. Expos løsning: `eas credentials` og så en ny nøgle. Hvis kvitteringen nævner `InvalidProviderToken`, anbefaler Expo at lave et nyt build og samtidig generere push-nøglen og profilen på ny.

## Før du slår notifikationer til

For at teste notifikationerne på din iPhone før udgivelsen kan du følge [TestFlight til at teste din app](https://devoria.fr/da/blog/testflight-test-iphone-app-for-apple). Hvis du sender stille notifikationer for at vække appen, så læs [guideline 2.5.4 om baggrundstilstande](https://devoria.fr/da/blog/guideline-2-5-4-baggrundstilstand-afvist-apple) igen. Hele kæden uden Mac finder du i [udgiv en iOS-app uden Mac](https://devoria.fr/da/blog/udgiv-ios-app-uden-mac-expo-eas), og trinene i udgivelsen på siden [udgiv en app i App Store](https://devoria.fr/da/expertise/udgiv-app-paa-app-store).

Før din første upload kan du tage den [gratis diagnose](https://devoria.fr/da/diagnostic): den fortæller dig, hvad der blokerer i dit projekt, og sender dig min tjekliste mod afvisninger fra Apple. Til at bygge appen, koble abonnementer på og udgive den følger [iOS & Android Kit](https://devoria.fr/da/kits/ios) forløbet i fire trin med startkoden fra mine apps, i dit eget tempo.

## Ofte stillede spørgsmål

### Udløber Apples push-certifikat?

.p12-certifikatet udløber efter et år, og dine notifikationer stopper, hvis det ikke bliver udskiftet. .p8-nøglen udløber aldrig: den stopper kun, hvis du tilbagekalder den. Det er hovedgrunden til at foretrække nøglen.

### Skal man have et push-certifikat pr. app?

Med et .p12-certifikat, ja: hvert certifikat er knyttet til én app. En .p8-nøgle kan bruges til alle apps på din konto. Med Expo kan én nøgle altså dække hele dit katalog.

### Hvordan fornyer man et Apple push-certifikat?

Opret et nyt certifikat fra din apps identifier med en ny signeringsanmodning, installer det på din server, og fjern så det gamle. Gør det før udløbet. Det nemmeste er stadig at skifte til en .p8-nøgle, som ikke skal fornyes.

### Jeg har mistet min .p8-fil, hvad gør jeg?

Apple lader dig kun downloade den én gang. Hvis EAS har oprettet nøglen, gemmer Expo den, og dine notifikationer fortsætter. Ellers opretter du en ny nøgle, tilføjer den med `eas credentials` og tilbagekalder den gamle i Apples portal. Dine brugeres Expo Push-tokens ændrer sig ikke.

### Skal man lave et nyt build efter at have skiftet push-nøgle?

Som regel ikke. Nøglen bruges af den server, der sender, ikke af den installerede app, og Expo oplyser, at en ny nøgle ikke ændrer tokens. Undtagelse: hvis kvitteringerne melder `InvalidProviderToken`, anbefaler Expo at lave et nyt build med en ny nøgle og en ny profil.


## Dit projekt

[Review Kit](https://devoria.fr/da/kits/app-review): Min tjekliste til App Store-review, mine afvisninger fra Apple og hvordan jeg rettede dem, tjeklisten til Google Play og tre Claude Code-skills. 369 kr..

[iOS & Android Kit](https://devoria.fr/da/kits/ios): Byg din iPhone- og Android-app med Claude Code: startkoden fra mine apps, vejen helt ud i butikkerne og alle kits. 739 kr..

[Diagnose: det, der skiller dig fra din iPhone-app](https://devoria.fr/da/diagnostic): 7 spørgsmål, 60 sekunder: du finder ud af, hvad der reelt holder dig tilbage fra at udgive din iPhone-app, får din vej i 4 trin og det kit, der passer til dig.
