Certyfikat push Apple: .p8 czy .p12 w Expo
Autor: Mehdi Azizi
Opublikowano , 8 min
Do powiadomień push Apple oferuje klucz .p8 bez daty ważności, dla wszystkich twoich aplikacji, albo roczny certyfikat .p12. W Expo kluczem zarządza EAS.
Certyfikat push Apple pozwala serwerowi wysyłać powiadomienia do twojej aplikacji przez APNs, usługę powiadomień Apple. Ma dwie formy: certyfikat .p12, ważny rok i powiązany z jedną aplikacją, albo klucz .p8, który nie wygasa i działa dla wszystkich aplikacji na twoim koncie. W Expo certyfikat nie jest ci potrzebny: EAS proponuje utworzenie klucza .p8 przy pierwszym buildzie, a usługa push Expo używa go za ciebie.
Poradnik o certyfikacie deweloperskim i provisioning profile wspomina o kluczu push w kilku zdaniach. Tutaj idziemy do końca: wybór między dwoma formatami, środowiska sandbox i production, odnawianie oraz awarie, które wyłączają powiadomienia w TestFlight.
Publikuję swoje aplikacje z Expo i EAS. Solys i TradaZen deklarują w konfiguracji plugin expo-notifications: to on przygotowuje aplikację do odbierania powiadomień.
Dlaczego Apple wymaga certyfikatu albo klucza
Powiadomienie push wychodzi z serwera, twojego albo Expo, który przekazuje je do APNs, a APNs dostarcza je na iPhone'a. APNs musi więc sprawdzić, czy ten serwer ma prawo pisać do twojej aplikacji. Apple daje dwa sposoby, żeby to udowodnić.
- Połączenie tokenowe, z kluczem .p8. Według Apple jest szybsze, działa z wielu serwerów, a jeden klucz obejmuje wszystkie aplikacje twojego zespołu albo ich część. Twój serwer podpisuje nim token, który trzeba odnawiać co najmniej raz na godzinę.
- Połączenie certyfikatowe, z plikiem .p12. Apple zaznacza, że ten certyfikat jest powiązany z jedną aplikacją i ważny rok. Kilka aplikacji, kilka certyfikatów.
Strona Apple o wygasaniu przypomina: klucz podpisujący tokeny APNs nigdy nie wygasa.
Tabela .p8 / .p12
| Kryterium | Klucz .p8 | Certyfikat .p12 |
|---|---|---|
| Ważność | Nie wygasa | Rok |
| Zakres | Wszystkie twoje aplikacje | Jedna aplikacja |
| Środowisko | Wybierane przy tworzeniu | Sandbox i production |
| Odnawianie | Brak, chyba że go unieważnisz | Co roku |
| Pobieranie | Tylko raz | Eksport z Maca |
| Liczba | Dwa na środowisko | Jeden na aplikację |
| Użycie z Expo | Tworzony i zarządzany przez EAS | Brak w dokumentacji Expo |
Trzy uwagi. Plik .p8 można pobrać tylko raz: Apple nie przechowuje go na twoim koncie. Plik .p12 natomiast eksportujesz z pęku kluczy Maca, na którym utworzono certyfikat. A limit dwóch kluczy na środowisko dotyczy kluczy zespołowych. Dla kluczy ograniczonych do wybranych aplikacji Apple pozwala na maksymalnie 200 na środowisko.
Strona Expo o danych uwierzytelniających mówi tylko o kluczu push i podaje maksymalnie dwa na konto, bez rozróżniania środowisk ani kluczy per aplikacja. Dla aplikacji Expo klucz .p8 to właściwy wybór.
Sandbox i production: dwa środowiska
APNs ma dwa serwery: development, nazywany też sandbox, oraz production. Apple przeznacza pierwszy do testów, a drugi do opublikowanych aplikacji. Aplikacja wie, którego użyć, dzięki entitlementowi aps-environment. Według Apple jego wartość zależy od profilu podpisu: development z profilem deweloperskim, production z profilem dystrybucyjnym i dla TestFlight.
Build TestFlight rozmawia więc z production, dokładnie jak App Store.
Po stronie Expo dwa szczegóły. Dokumentacja expo-notifications mówi, że entitlement jest zawsze zapisany w projekcie jako development, a w archiwum buildu release zmieniany na production. Poza tym token Expo jest przy tworzeniu przypisywany do środowiska aplikacji, wykrywanego automatycznie: przy wysyłce nic nie musisz wybierać.
Jeśli tworzysz klucz samodzielnie, Apple pyta o jego środowisko i zakres: cały zespół albo wybrane aplikacje. Dokumentacja dla deweloperów opisuje teraz klucze zespołowe ograniczone do sandbox albo production, przy czym starsze klucze działające wszędzie nadal są akceptowane. Pomoc konta twierdzi z kolei nadal, że klucz działa w obu środowiskach. Apple sobie przeczy: kieruj się środowiskiem wybranym przy tworzeniu. Klucz zarezerwowany dla sandbox nie zadziała ani w TestFlight, ani w App Store.
Jak Expo zarządza kluczem push
Według poradnika konfiguracji Expo, zaktualizowanego 28 lipca 2026, pierwszy build deweloperski zaproponuje ci konfigurację powiadomień push i wygenerowanie klucza APNs. Odpowiedz „tak” na oba pytania. Bez EAS Build uruchom eas credentials. Potrzebujesz płatnego konta Apple Developer.
Dalej:
- EAS przechowuje klucz i wiąże go z twoją aplikacją. Według Expo jeden klucz obsłuży dowolną liczbę aplikacji, a wgranie nowego nie zmienia tokenów Expo Push twoich użytkowników.
- Twój serwer nie łączy się z APNs. Wysyła do usługi push Expo, która przekazuje dalej do APNs. Expo prosi o odczytywanie potwierdzeń (receipts) mniej więcej 15 minut po wysyłce: tam pojawiają się błędy.
- Plugin dodaje entitlement. Zadeklaruj
expo-notificationswplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Dwie pułapki. FAQ Expo mówi, że Expo Go nie obsługuje już powiadomień push od SDK 53, a strona expo-notifications dotyczy tylko Androida. W obu przypadkach Expo zaleca build deweloperski: testuj na nim. Ponadto usunięcie klucza przez eas credentials usuwa go z serwerów Expo, ale nie z twojego konta Apple. Żeby zwolnić miejsce, unieważnij go w portalu Apple. Jak każdy sekret, plik .p8 nigdy nie może trafić do twojego repozytorium: zasada jest ta sama co przy kluczach API w aplikacji Expo.
Odnawianie: co naprawdę wygasa
Klucza .p8 nie trzeba odnawiać. Przestaje działać tylko wtedy, gdy go unieważnisz. Jeśli podejrzewasz, że wyciekł, Apple zaleca utworzenie nowego klucza, przełączenie się na niego i dopiero potem unieważnienie starego. Żeby wymienić klucz w Expo, FAQ podaje procedurę: eas credentials, iOS, twój profil buildu, potem usunięcie klucza push i wygenerowanie nowego.
Certyfikat .p12 wygasa co roku. Apple każe go zaktualizować przed terminem i pilnować daty w pęku kluczy. Po wygaśnięciu albo unieważnieniu nie możesz już wysyłać powiadomień do swojej aplikacji. Apple nie opisuje osobnego odnawiania: tworzysz nowy certyfikat z identyfikatora aplikacji, instalujesz go na serwerze przed terminem, a potem usuwasz stary. Najlepszym odnowieniem jest przejście na klucz.
Zarządzasz iPhone'ami przez Intune albo inne narzędzie do zarządzania flotą? To nie ten sam certyfikat. Certyfikat push do zarządzania urządzeniami tworzy się w Apple Push Certificates Portal i odnawia co roku. Apple zaleca zapisanie, którego konta Apple użyłeś: będzie potrzebne przy odnawianiu.
Typowe awarie i ich naprawa
Działa w development, nie działa w TestFlight
- Wysyłasz na zły token. Build TestFlight rejestruje się w production i dostaje nowy token. Token z buildu deweloperskiego nie zadziała: Apple odpowiada
BadDeviceToken, gdy token nie pasuje do środowiska. Pobierz token z samej aplikacji z TestFlight. - Aplikacja produkcyjna nie ma danych uwierzytelniających push. To diagnoza z FAQ Expo. Sprawdź stronę credentials projektu na expo.dev albo
eas credentials. - Twój klucz jest ograniczony do sandbox. Zastąp go kluczem ważnym w production.
- iPhone nie dostaje tokena. Jeśli zainstalowałeś build TestFlight na build z Xcode, Expo sugeruje ponowne uruchomienie urządzenia.
„No valid aps-environment entitlement string found”
Według FAQ Expo ten błąd oznacza, że dla twojego projektu iOS nie skonfigurowano klucza push. Sprawdź stronę credentials, a potem uruchom build ponownie: EAS zaproponuje wtedy wygenerowanie klucza. Sprawdź też, czy expo-notifications na pewno jest w plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple wysyła tego maila po przesłaniu buildu: twoja aplikacja wygląda, jakby rejestrowała się w APNs, ale jej podpis nie zawiera entitlementu aps-environment. Notatka Expo o SDK 51 to wyjaśnia. Od tego SDK entitlement jest dodawany tylko wtedy, gdy zainstalowano expo-notifications. Ostrzeżenie wynika z dwóch kontroli Apple. Pierwsza porównuje capabilities identyfikatora aplikacji z entitlementami aplikacji. Druga wykrywa w binarce metodę rejestracji powiadomień, którą kod Expo zawiera w każdej aplikacji.
To ostrzeżenie, a nie odrzucenie, zaznacza Expo. Jeśli używasz powiadomień, dodaj plugin i zrób nowy build: EAS synchronizuje capabilities identyfikatora aplikacji przy każdym buildzie. Jeśli nie, usuń capability Push Notifications ze swojego identyfikatora w portalu Apple. Ostrzeżenie może się dalej pojawiać, bez żadnych konsekwencji.
InvalidCredentials albo wszystkie aplikacje nagle milkną
InvalidCredentials w potwierdzeniu oznacza, że twoje dane uwierzytelniające push nie są już ważne, często dlatego, że klucz unieważniono. Wszystkie aplikacje, które go używały, milkną jednocześnie. Naprawa według Expo: eas credentials, a potem nowy klucz. Jeśli potwierdzenie wspomina InvalidProviderToken, Expo zaleca nowy build z ponownie wygenerowanym kluczem push i profilem.
Zanim włączysz powiadomienia
Żeby przetestować powiadomienia na swoim iPhonie przed premierą, skorzystaj z poradnika TestFlight do testowania aplikacji. Jeśli wysyłasz ciche powiadomienia, żeby wybudzać aplikację, przeczytaj jeszcze raz o guideline 2.5.4 dotyczącej trybów działania w tle. Cały proces bez Maca znajdziesz w publikowaniu aplikacji iOS bez Maca, a kroki premiery na stronie publikowanie aplikacji w App Store.
Przed pierwszą wysyłką zrób darmową diagnozę: powie ci, co blokuje twój projekt, i wyśle ci moją checklistę przeciw odrzuceniom przez Apple. Żeby zbudować aplikację, podłączyć subskrypcje i ją opublikować, iOS & Android Kit prowadzi cię przez cztery etapy z kodem startowym moich aplikacji, we własnym tempie.
Najczęściej zadawane pytania
Czy certyfikat push Apple wygasa?
Certyfikat .p12 wygasa po roku, a jeśli go nie wymienisz, twoje powiadomienia przestaną działać. Klucz .p8 nigdy nie wygasa: przestaje działać tylko wtedy, gdy go unieważnisz. To główny powód, żeby wybrać klucz.
Czy potrzebny jest osobny certyfikat push dla każdej aplikacji?
Z certyfikatem .p12 tak: każdy certyfikat jest powiązany z jedną aplikacją. Klucz .p8 działa dla wszystkich aplikacji na twoim koncie. W Expo jeden klucz może więc obsłużyć cały twój katalog.
Jak odnowić certyfikat push Apple?
Utwórz nowy certyfikat z identyfikatora aplikacji, z nowym żądaniem podpisania certyfikatu, zainstaluj go na serwerze, a potem usuń stary. Zrób to przed terminem. Najprościej jednak przejść na klucz .p8, którego nie trzeba odnawiać.
Zgubiłem plik .p8, co zrobić?
Apple pozwala pobrać go tylko raz. Jeśli klucz utworzył EAS, Expo go przechowuje i twoje powiadomienia działają dalej. Jeśli nie, utwórz nowy klucz, dodaj go przez eas credentials, a potem unieważnij stary w portalu Apple. Tokeny Expo Push twoich użytkowników się nie zmieniają.
Czy po zmianie klucza push trzeba zrobić nowy build?
Zwykle nie. Klucz służy serwerowi, który wysyła, a nie zainstalowanej aplikacji, a Expo podaje, że nowy klucz nie zmienia tokenów. Wyjątek: jeśli potwierdzenia zgłaszają InvalidProviderToken, Expo zaleca nowy build z nowym kluczem i nowym profilem.

