# Certificat push d'Apple: .p8 o .p12 amb Expo

> Apple ofereix una clau .p8 sense caducitat per a totes les apps o un certificat .p12 anual. Amb Expo, EAS gestiona la clau per tu.

Pàgina original: [Certificat push d'Apple: .p8 o .p12 amb Expo](https://devoria.fr/ca/blog/certificat-push-apple-p8-p12-expo)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-11-04
Darrera revisió del contingut: 2026-11-04


El certificat push d'Apple autoritza un servidor a enviar notificacions a la teva app a través d'APNs, el servei de notificacions d'Apple. N'hi ha de dues formes: un certificat .p12, vàlid un any i lligat a una sola app, o una clau .p8, que no caduca i serveix per a totes les apps del teu compte. **Amb Expo, no et cal el certificat: EAS et proposa crear una clau .p8 al primer build, i el servei push d'Expo la fa servir per tu.**

La guia sobre [el certificat de desenvolupador i el provisioning profile](https://devoria.fr/ca/blog/certificat-ios-provisioning-profile-expo) parla de la clau push en poques línies. Aquí anem fins al final: l'elecció entre els dos formats, els entorns sandbox i producció, la renovació, i les avaries que tallen les notificacions a TestFlight.

Publico les meves apps amb Expo i EAS. Solys i TradaZen declaren el plugin `expo-notifications` a la seva configuració: és el que prepara l'app per rebre notificacions.

## Per què Apple demana un certificat o una clau

Una notificació push surt d'un servidor, el teu o el d'Expo, que la passa a APNs, que la lliura a l'iPhone. Per tant, APNs ha de verificar que aquest servidor té dret a escriure a la teva app. Apple ofereix dues maneres de demostrar-ho.

- **La connexió per token, amb una clau .p8.** [Segons Apple](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns), és més ràpida, es pot fer servir des de diversos servidors, i una mateixa clau cobreix totes les apps del teu equip o una part. El teu servidor signa amb ella un token, que s'ha de refer com a mínim cada hora.
- **La connexió per certificat, amb un fitxer .p12.** [Apple precisa](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) que aquest certificat està lligat a una sola app i és vàlid un any. Diverses apps, diversos certificats.

[La pàgina d'Apple sobre les caducitats](https://developer.apple.com/support/expiration/) ho recorda: la clau de signatura dels tokens APNs no caduca mai.

## La taula .p8 / .p12

| Criteri     | Clau .p8                    | Certificat .p12         |
| ----------- | --------------------------- | ----------------------- |
| Durada      | Sense caducitat             | Un any                  |
| Abast       | Totes les teves apps        | Una sola app            |
| Entorn      | Triat en crear-la           | Sandbox i producció     |
| Renovació   | Cap, excepte revocació      | Cada any                |
| Descàrrega  | Una sola vegada             | Exportació des del Mac  |
| Nombre      | Dues per entorn             | Un per app              |
| Ús amb Expo | Creada i gestionada per EAS | Absent de la doc d'Expo |

Tres aclariments. El fitxer .p8 [només es pot descarregar una vegada](https://developer.apple.com/help/account/keys/create-a-private-key): Apple no el guarda al teu compte. El .p12, en canvi, [s'exporta des del clauer del Mac](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate) que ha creat el certificat. I el límit de dues claus per entorn s'aplica a les claus d'equip. Per a les claus limitades a certes apps, Apple en permet fins a 200 per entorn.

[La pàgina d'Expo sobre les credencials](https://docs.expo.dev/app-signing/app-credentials/) només parla de la clau push, i en compta dues per compte com a màxim, sense distingir entorns ni claus per app. **Per a una app Expo, la clau .p8 és la bona elecció.**

## Sandbox i producció: dos entorns

APNs té dos servidors: desenvolupament, també anomenat sandbox, i producció. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) reserva el primer per a les proves i el segon per a les apps publicades. L'app sap quin ha de fer servir gràcies a l'entitlement `aps-environment`. [Segons Apple](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment), el seu valor segueix el perfil de signatura: `development` amb un perfil de desenvolupament, `production` amb un perfil de distribució i per a TestFlight.

**Per tant, un build de TestFlight parla amb producció, exactament com l'App Store.**

Pel costat d'Expo, dos detalls. [La documentació d'expo-notifications](https://docs.expo.dev/versions/latest/sdk/notifications/) indica que l'entitlement sempre s'escriu com a `development` al projecte, i després passa a `production` a l'arxiu d'un build de release. I en crear-se, el token d'Expo queda vinculat a l'entorn de l'app, detectat automàticament: no has de triar res en enviar.

Si crees la clau tu mateix, Apple et demana l'entorn i l'abast: tot l'equip o certes apps. La seva documentació per a desenvolupadors descriu ara claus d'equip limitades a sandbox o a producció, i les claus antigues vàlides a tot arreu continuen acceptades. [L'ajuda del compte](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens), en canvi, encara afirma que la clau serveix per als dos entorns. Apple es contradiu: queda't amb l'entorn que triïs en crear-la. **Una clau reservada a sandbox no servirà ni per a TestFlight ni per a l'App Store.**

## Com gestiona Expo la clau push

Segons [la guia de configuració d'Expo](https://docs.expo.dev/push-notifications/push-notifications-setup/), actualitzada el 28 de juliol de 2026, el teu primer build de desenvolupament et proposa configurar les notificacions push i generar una clau APNs. Respon que sí a totes dues. Sense EAS Build, executa `eas credentials`. Necessites un compte d'Apple Developer de pagament.

Després:

- **EAS emmagatzema la clau i l'associa a la teva app.** Segons Expo, una clau serveix per a tantes apps com vulguis, i pujar-ne una de nova no canvia els tokens Expo Push dels teus usuaris.
- **El teu servidor no crida APNs.** Envia al servei push d'Expo, que ho transmet a APNs. [Expo et demana que llegeixis els rebuts](https://docs.expo.dev/push-notifications/sending-notifications/) uns 15 minuts després de l'enviament: és allà on apareixen els errors.
- **El plugin afegeix l'entitlement.** Declara `expo-notifications` a `plugins`:

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

Dues trampes. [Les FAQ d'Expo](https://docs.expo.dev/push-notifications/faq/) diuen que Expo Go ja no gestiona les notificacions push des del SDK 53, mentre que la pàgina d'expo-notifications només ho diu per a Android. En tots dos casos, Expo recomana un build de desenvolupament: prova amb aquest. I esborrar la clau amb `eas credentials` la treu dels servidors d'Expo, no del teu compte d'Apple. Per alliberar una plaça, revoca-la al portal d'Apple. Com qualsevol secret, el fitxer .p8 no ha d'acabar mai al teu repositori: la regla és la mateixa que per a [les claus API d'una app Expo](https://devoria.fr/ca/blog/clau-api-secreta-app-expo).

## Renovar: què caduca de debò

**La clau .p8 no s'ha de renovar.** Només s'atura si la revoques. Si creus que està compromesa, [Apple recomana](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) crear una clau nova, passar-hi, i només després revocar l'antiga. Per substituir la clau amb Expo, les FAQ donen els passos: `eas credentials`, iOS, el teu perfil de build, i després treure la clau push i generar-ne una de nova.

**El certificat .p12 caduca cada any.** Apple demana actualitzar-lo abans del venciment i vigilar-ne la data al clauer. Un cop caducat o revocat, [ja no pots enviar notificacions](https://developer.apple.com/help/account/certificates/certificates-overview) a la teva app. Apple no descriu cap renovació com a tal: crees un certificat nou des de l'identificador de l'app, l'instal·les al servidor abans del venciment, i després treus l'antic. **La millor renovació continua sent passar a la clau.**

> Gestiones iPhones amb Intune o una altra eina de gestió de flota? No és el mateix certificat. El certificat push de gestió de dispositius es crea a l'Apple Push Certificates Portal i es renova cada any. [Apple recomana](https://support.apple.com/guide/deployment/dep2de55389a) apuntar el compte d'Apple utilitzat: servirà per a la renovació.

## Les avaries típiques i com corregir-les

### Funciona en desenvolupament, però no a TestFlight

1. **Envies al token equivocat.** El build de TestFlight es registra a producció i obté un token nou. Un token del teu build de desenvolupament no funciona: Apple respon `BadDeviceToken` quan [el token no correspon a l'entorn](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns). Agafa el token des de la mateixa app de TestFlight.
2. **L'app de producció no té credencials push.** És el diagnòstic de les FAQ d'Expo. Comprova la pàgina de credencials del projecte a expo.dev, o `eas credentials`.
3. **La teva clau està limitada a sandbox.** Substitueix-la per una clau vàlida a producció.
4. **L'iPhone no obté cap token.** Si has instal·lat el build de TestFlight per sobre d'un build d'Xcode, Expo suggereix reiniciar el dispositiu.

### «No valid aps-environment entitlement string found»

Segons les FAQ d'Expo, aquest error indica que no hi ha cap clau push configurada per al teu projecte iOS. Comprova la pàgina de credencials i torna a llançar un build: EAS et proposarà llavors generar la clau. Comprova també que `expo-notifications` és a `plugins`.

### ITMS-90078: Missing Push Notification Entitlement

Apple envia aquest correu després de l'enviament: sembla que la teva app es registra a APNs, però la seva signatura no conté l'entitlement `aps-environment`. [La nota d'Expo sobre el SDK 51](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) ho explica. Des d'aquest SDK, l'entitlement només s'afegeix si `expo-notifications` està instal·lat. L'avís ve de dos controls d'Apple. El primer compara les capacitats del teu identificador d'app amb els entitlements de l'app. El segon detecta al binari un mètode de registre a les notificacions, que el codi d'Expo conté a totes les apps.

**És un avís, no un rebuig**, precisa Expo. Si fas servir notificacions, afegeix el plugin i torna a fer un build: [EAS sincronitza les capacitats](https://docs.expo.dev/build-reference/ios-capabilities/) de l'identificador d'app a cada build. Si no, treu la capacitat Push Notifications del teu identificador al portal d'Apple. L'avís pot persistir, sense conseqüències.

### InvalidCredentials o totes les apps mudes de cop

`InvalidCredentials` en un rebut vol dir que les teves credencials push ja no són vàlides, sovint perquè la clau s'ha revocat. Totes les apps que la feien servir callen alhora. La solució d'Expo: `eas credentials`, i després una clau nova. Si el rebut menciona `InvalidProviderToken`, Expo recomana tornar a fer un build regenerant la clau push i el perfil.

## Abans d'activar les notificacions

Per provar les notificacions al teu iPhone abans del llançament, segueix [TestFlight per provar la teva app](https://devoria.fr/ca/blog/testflight-provar-app-iphone-abans-enviar). Si envies notificacions silencioses per despertar l'app, rellegeix [la guideline 2.5.4 sobre els modes en segon pla](https://devoria.fr/ca/blog/guideline-2-5-4-mode-segon-pla-apple). Tota la cadena, sense Mac, és a [publicar una app iOS sense Mac](https://devoria.fr/ca/blog/publicar-app-ios-sense-mac-expo-eas), i els passos del llançament a la pàgina [publicar una aplicació a l'App Store](https://devoria.fr/ca/expertise/publicar-una-aplicacio-app-store).

Abans del teu primer enviament, fes el [diagnòstic gratuït](https://devoria.fr/ca/diagnostic): et diu què bloqueja el teu projecte i t'envia la meva checklist antirebuig d'Apple. Per construir l'app, connectar les subscripcions i publicar-la, l'[iOS & Android Kit](https://devoria.fr/ca/kits/ios) segueix el recorregut en quatre etapes amb el codi de partida de les meves apps, al teu ritme.

## Preguntes freqüents

### El certificat push d'Apple caduca?

El certificat .p12 caduca al cap d'un any, i les teves notificacions s'aturen si no el substitueixes. La clau .p8 no caduca mai: només s'atura si la revoques. És la raó principal per preferir la clau.

### Cal un certificat push per app?

Amb un certificat .p12, sí: cada certificat està lligat a una sola app. Una clau .p8 serveix per a totes les apps del teu compte. Per tant, amb Expo una sola clau pot cobrir tot el teu catàleg.

### Com es renova un certificat push d'Apple?

Crea un certificat nou des de l'identificador de la teva app, amb una nova sol·licitud de signatura, instal·la'l al servidor i després treu l'antic. Fes-ho abans del venciment. El més senzill continua sent passar a una clau .p8, que no es renova.

### He perdut el meu fitxer .p8, què faig?

Apple només permet descarregar-lo una vegada. Si EAS ha creat la clau, Expo la guarda i les teves notificacions continuen. Si no, crea una clau nova, afegeix-la amb `eas credentials` i després revoca l'antiga al portal d'Apple. Els tokens Expo Push dels teus usuaris no canvien.

### Cal tornar a fer un build després de canviar de clau push?

En general, no. La clau serveix al servidor que envia, no a l'app instal·lada, i Expo indica que una clau nova no canvia els tokens. Excepció: si els rebuts indiquen `InvalidProviderToken`, Expo recomana tornar a fer un build amb una clau nova i un perfil nou.


## El teu projecte

[Review Kit](https://devoria.fr/ca/kits/app-review): La meva checklist de revisió de l'App Store, els rebutjos d'Apple que he corregit, la de Google Play i tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/ca/kits/ios): Crea la teva app d'iPhone i Android amb Claude Code: el codi de partida de les meves apps, el camí fins a les botigues i tots els kits. 99 €.

[Diagnòstic: què et separa de la teva app d'iPhone](https://devoria.fr/ca/diagnostic): 7 preguntes, 60 segons: sabràs què et bloqueja de debò per publicar la teva app d'iPhone, el teu recorregut en 4 etapes i el kit que et toca.
