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

> För push-notiser erbjuder Apple en .p8-nyckel som aldrig går ut och gäller alla dina appar, eller ett årligt .p12-certifikat. Med Expo sköter EAS nyckeln.

Originalsida: [Apple push-certifikat: .p8 eller .p12 med Expo](https://devoria.fr/sv/blog/apple-push-certifikat-p8-p12-expo)
Författare: [Mehdi Azizi](https://devoria.fr/sv/mehdi-azizi)
Publicerad: 2026-11-04
Innehållet senast granskat: 2026-11-04


Apples push-certifikat ger en server rätt att skicka notiser till din app via APNs, Apples notistjänst. Det finns i två former: ett .p12-certifikat som gäller i ett år och är kopplat till en enda app, eller en .p8-nyckel som aldrig går ut och fungerar för alla appar på ditt konto. **Med Expo behöver du inget certifikat: EAS erbjuder sig att skapa en .p8-nyckel vid första bygget, och Expos push-tjänst använder den åt dig.**

Guiden om [utvecklarcertifikatet och provisioning profile](https://devoria.fr/sv/blog/ios-utvecklarcertifikat-provisioning-profile-expo) nämner push-nyckeln på några rader. Här går vi hela vägen: valet mellan de två formaten, miljöerna sandbox och production, förnyelsen och felen som stänger av notiserna i TestFlight.

Jag publicerar mina appar med Expo och EAS. Solys och TradaZen deklarerar pluginet `expo-notifications` i sin konfiguration: det är det som förbereder appen för att ta emot notiser.

## Varför Apple kräver ett certifikat eller en nyckel

En push-notis skickas från en server, din egen eller Expos, som lämnar den till APNs, som levererar den till iPhonen. APNs måste alltså kontrollera att servern har rätt att skriva till din app. Apple erbjuder två sätt att bevisa det.

- **Tokenbaserad anslutning, med en .p8-nyckel.** [Enligt Apple](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) är den snabbare, går att använda från flera servrar, och en och samma nyckel täcker alla appar i ditt team eller en del av dem. Din server signerar en token med den, och den måste göras om minst en gång i timmen.
- **Certifikatbaserad anslutning, med en .p12-fil.** [Apple förtydligar](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) att certifikatet är kopplat till en enda app och gäller i ett år. Flera appar, flera certifikat.

[Apples sida om utgångsdatum](https://developer.apple.com/support/expiration/) påminner om det: signeringsnyckeln för APNs-tokens går aldrig ut.

## Tabellen .p8 / .p12

| Kriterium   | .p8-nyckel                   | .p12-certifikat              |
| ----------- | ---------------------------- | ---------------------------- |
| Giltighet   | Går aldrig ut                | Ett år                       |
| Omfattning  | Alla dina appar              | En enda app                  |
| Miljö       | Väljs när den skapas         | Sandbox och production       |
| Förnyelse   | Ingen, utom vid återkallning | Varje år                     |
| Nedladdning | Bara en gång                 | Export från Macen            |
| Antal       | Två per miljö                | Ett per app                  |
| Med Expo    | Skapas och hanteras av EAS   | Saknas i Expos dokumentation |

Tre förtydliganden. .p8-filen [kan bara laddas ner en gång](https://developer.apple.com/help/account/keys/create-a-private-key): Apple sparar den inte i ditt konto. .p12-filen däremot [exporteras från nyckelringen på den Mac](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate) som skapade certifikatet. Och gränsen på två nycklar per miljö gäller teamnycklar. För nycklar som är begränsade till vissa appar tillåter Apple upp till 200 per miljö.

[Expos sida om autentiseringsuppgifter](https://docs.expo.dev/app-signing/app-credentials/) pratar bara om push-nyckeln och anger högst två per konto, utan att skilja på miljöer eller nycklar per app. **För en Expo-app är .p8-nyckeln rätt val.**

## Sandbox och production: två miljöer

APNs har två servrar: development, även kallad sandbox, och production. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) reserverar den första för tester och den andra för publicerade appar. Appen vet vilken den ska använda tack vare entitlementet `aps-environment`. [Enligt Apple](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) följer värdet signeringsprofilen: `development` med en utvecklingsprofil, `production` med en distributionsprofil och för TestFlight.

**Ett TestFlight-bygge pratar alltså med production, precis som App Store.**

På Expo-sidan finns två detaljer. [Dokumentationen för expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) anger att entitlementet alltid skrivs som `development` i projektet och sedan ändras till `production` i arkivet för ett release-bygge. Och när Expo-tokenen skapas kopplas den till appens miljö, som upptäcks automatiskt: du behöver inte välja något när du skickar.

Om du skapar nyckeln själv frågar Apple efter miljö och omfattning: hela teamet eller vissa appar. Apples utvecklardokumentation beskriver numera teamnycklar som är begränsade till sandbox eller production, medan de gamla nycklarna som gäller överallt fortfarande accepteras. [Kontohjälpen](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) påstår däremot fortfarande att nyckeln fungerar i båda miljöerna. Apple motsäger sig självt: utgå från miljön du väljer när du skapar nyckeln. **En nyckel som bara gäller sandbox fungerar varken för TestFlight eller App Store.**

## Hur Expo hanterar push-nyckeln

Enligt [Expos konfigurationsguide](https://docs.expo.dev/push-notifications/push-notifications-setup/), uppdaterad den 28 juli 2026, erbjuder ditt första utvecklingsbygge att konfigurera push-notiser och generera en APNs-nyckel. Svara ja på båda. Utan EAS Build kör du `eas credentials`. Du behöver ett betalt Apple Developer-konto.

Sedan:

- **EAS lagrar nyckeln och kopplar den till din app.** Enligt Expo fungerar en nyckel för hur många appar du vill, och att ladda upp en ny ändrar inte dina användares Expo Push-tokens.
- **Din server anropar inte APNs.** Den skickar till Expos push-tjänst, som vidarebefordrar till APNs. [Expo ber dig läsa kvittona](https://docs.expo.dev/push-notifications/sending-notifications/) ungefär 15 minuter efter utskicket: det är där felen visas.
- **Pluginet lägger till entitlementet.** Deklarera `expo-notifications` i `plugins`:

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

Två fällor. [Expos FAQ](https://docs.expo.dev/push-notifications/faq/) säger att Expo Go inte längre hanterar push-notiser sedan SDK 53, medan sidan för expo-notifications bara nämner Android. I båda fallen rekommenderar Expo ett utvecklingsbygge: testa med det. Och om du tar bort nyckeln med `eas credentials` försvinner den från Expos servrar, inte från ditt Apple-konto. För att frigöra en plats återkallar du den i Apples portal. Som alla hemligheter får .p8-filen aldrig hamna i ditt repo: regeln är densamma som för [API-nycklarna i en Expo-app](https://devoria.fr/sv/blog/hemlig-api-nyckel-expo-app).

## Förnya: det som faktiskt går ut

**.p8-nyckeln behöver inte förnyas.** Den slutar bara fungera om du återkallar den. Om du tror att den har läckt [rekommenderar Apple](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) att du skapar en ny nyckel, byter till den och först därefter återkallar den gamla. För att byta nyckel med Expo ger FAQ:n tillvägagångssättet: `eas credentials`, iOS, din byggprofil, sedan ta bort push-nyckeln och generera en ny.

**.p12-certifikatet går ut varje år.** Apple ber dig uppdatera det före utgångsdatumet och hålla koll på datumet i nyckelringen. När det har gått ut eller återkallats [kan du inte längre skicka notiser](https://developer.apple.com/help/account/certificates/certificates-overview) till din app. Apple beskriver ingen separat förnyelse: du skapar ett nytt certifikat från appens identifierare, installerar det på din server före utgångsdatumet och tar sedan bort det gamla. **Den bästa förnyelsen är fortfarande att byta till nyckeln.**

> Hanterar du iPhones med Intune eller ett annat verktyg för enhetshantering? Det är inte samma certifikat. Push-certifikatet för enhetshantering skapas på Apple Push Certificates Portal och förnyas varje år. [Apple rekommenderar](https://support.apple.com/guide/deployment/dep2de55389a) att du antecknar vilket Apple-konto du använde: det behövs vid förnyelsen.

## Typiska fel och hur du fixar dem

### Det fungerar i utveckling, inte i TestFlight

1. **Du skickar till fel token.** TestFlight-bygget registrerar sig i production och får en ny token. En token från ditt utvecklingsbygge fungerar inte: Apple svarar `BadDeviceToken` när [tokenen inte matchar miljön](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Hämta tokenen från själva TestFlight-appen.
2. **Production-appen saknar push-uppgifter.** Det är diagnosen i Expos FAQ. Kontrollera projektets sida för autentiseringsuppgifter på expo.dev, eller `eas credentials`.
3. **Din nyckel är begränsad till sandbox.** Byt ut den mot en nyckel som gäller i production.
4. **iPhonen får ingen token.** Om du installerade TestFlight-bygget ovanpå ett Xcode-bygge föreslår Expo att du startar om enheten.

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

Enligt Expos FAQ betyder felet att ingen push-nyckel är konfigurerad för ditt iOS-projekt. Kontrollera sidan för autentiseringsuppgifter och kör sedan ett nytt bygge: EAS erbjuder sig då att generera nyckeln. Kontrollera också att `expo-notifications` verkligen finns i `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple skickar det här mejlet efter uppladdningen: din app verkar registrera sig hos APNs, men signaturen innehåller inte entitlementet `aps-environment`. [Expos anteckning om SDK 51](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) förklarar det. Sedan den SDK:n läggs entitlementet bara till om `expo-notifications` är installerat. Varningen kommer från två kontroller hos Apple. Den första jämför capabilities för ditt app-ID med appens entitlements. Den andra hittar en metod för notisregistrering i binären, som Expos kod innehåller i alla appar.

**Det är en varning, inte ett avslag**, förtydligar Expo. Om du använder notiser lägger du till pluginet och bygger om: [EAS synkroniserar capabilities](https://docs.expo.dev/build-reference/ios-capabilities/) för app-ID:t vid varje bygge. Annars tar du bort capabilityn Push Notifications från ditt app-ID i Apples portal. Varningen kan ligga kvar, utan konsekvenser.

### InvalidCredentials eller alla appar tysta på en gång

`InvalidCredentials` i ett kvitto betyder att dina push-uppgifter inte längre är giltiga, ofta för att nyckeln har återkallats. Alla appar som använde den tystnar samtidigt. Expos lösning: `eas credentials` och sedan en ny nyckel. Om kvittot nämner `InvalidProviderToken` rekommenderar Expo att du bygger om och genererar om push-nyckeln och profilen.

## Innan du aktiverar notiser

För att testa notiser på din iPhone före lanseringen, följ [TestFlight för att testa din app](https://devoria.fr/sv/blog/testflight-testa-iphone-app). Om du skickar tysta notiser för att väcka appen, läs om [riktlinje 2.5.4 om bakgrundslägen](https://devoria.fr/sv/blog/guideline-2-5-4-bakgrundslage-avvisat-apple). Hela kedjan, utan Mac, finns i [publicera en iOS-app utan Mac](https://devoria.fr/sv/blog/publicera-ios-app-utan-mac-expo-eas), och stegen för lanseringen på sidan [publicera en app på App Store](https://devoria.fr/sv/expertise/publicera-app-pa-app-store).

Innan ditt första utskick, gör den [kostnadsfria diagnosen](https://devoria.fr/sv/diagnostic): den visar vad som blockerar i ditt projekt och skickar dig min checklista mot avslag från Apple. För att bygga appen, koppla in prenumerationerna och publicera den följer [iOS & Android Kit](https://devoria.fr/sv/kits/ios) vägen i fyra steg med startkoden från mina appar, i din egen takt.

## Vanliga frågor

### Går Apples push-certifikat ut?

.p12-certifikatet går ut efter ett år, och dina notiser slutar fungera om det inte byts ut. .p8-nyckeln går aldrig ut: den slutar bara fungera om du återkallar den. Det är huvudskälet att välja nyckeln.

### Behövs ett push-certifikat per app?

Med ett .p12-certifikat, ja: varje certifikat är kopplat till en enda app. En .p8-nyckel fungerar för alla appar på ditt konto. Med Expo kan alltså en enda nyckel täcka hela din katalog.

### Hur förnyar jag ett push-certifikat från Apple?

Skapa ett nytt certifikat från appens identifierare, med en ny signeringsbegäran, installera det på din server och ta sedan bort det gamla. Gör det före utgångsdatumet. Enklast är ändå att byta till en .p8-nyckel, som aldrig behöver förnyas.

### Jag har tappat bort min .p8-fil, vad gör jag?

Apple låter dig bara ladda ner den en gång. Om EAS skapade nyckeln har Expo kvar den och dina notiser fortsätter fungera. Annars skapar du en ny nyckel, lägger till den med `eas credentials` och återkallar sedan den gamla i Apples portal. Dina användares Expo Push-tokens ändras inte.

### Måste jag bygga om efter att ha bytt push-nyckel?

Oftast inte. Nyckeln används av servern som skickar, inte av den installerade appen, och Expo anger att en ny nyckel inte ändrar tokens. Undantag: om kvittona visar `InvalidProviderToken` rekommenderar Expo att du bygger om med en ny nyckel och en ny profil.


## Ditt projekt

[Review Kit](https://devoria.fr/sv/kits/app-review): Min checklista för App Store-granskningen, mina avslag från Apple och hur jag fixade dem, en för Google Play och tre Claude Code-skills. 549 kr.

[iOS & Android Kit](https://devoria.fr/sv/kits/ios): Bygg din app för iPhone och Android med Claude Code: startkoden från mina appar, hela vägen till butikerna och alla kit. 1 099 kr.

[Diagnos: det som skiljer dig från din iPhone-app](https://devoria.fr/sv/diagnostic): 7 frågor, 60 sekunder: du får veta vad som egentligen hindrar dig från att publicera din iPhone-app, din väg i 4 steg och kitet som passar dig.
