Apple push-certifikat: .p8 eller .p12 med Expo
Af Mehdi Azizi
Udgivet , 8 min.
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.
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 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 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, at certifikatet er knyttet til én app og gælder i et år. Flere apps, flere certifikater.
Apples side om udløb 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: Apple gemmer den ikke på din konto. .p12-filen eksporteres fra nøgleringen på den Mac, 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 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 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 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 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 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, 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 cirka 15 minutter efter afsendelsen: det er der, fejlene vises.
- Pluginet sætter entitlementet. Deklarér
expo-notificationsiplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
To faldgruber. Expos 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.
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 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 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 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
- 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. Hent tokenet fra selve TestFlight-appen. - Produktionsappen har ingen push-credentials. Det er diagnosen i Expos FAQ. Tjek projektets credentials-side på expo.dev eller
eas credentials. - Din nøgle er begrænset til sandbox. Udskift den med en nøgle, der gælder i produktion.
- 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 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 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. Hvis du sender stille notifikationer for at vække appen, så læs guideline 2.5.4 om baggrundstilstande igen. Hele kæden uden Mac finder du i udgiv en iOS-app uden Mac, og trinene i udgivelsen på siden udgiv en app i App Store.
Før din første upload kan du tage den gratis diagnose: 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 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.

