# Apple push sertifikası: Expo ile .p8 mi .p12 mi?

> Apple, süresiz ve tüm uygulamalarında geçerli bir .p8 anahtarı ya da yıllık .p12 sertifikası sunar. Expo'da anahtarı EAS yönetir.

Orijinal sayfa: [Apple push sertifikası: Expo ile .p8 mi .p12 mi?](https://devoria.fr/tr/blog/apple-push-sertifikasi-expo-p8-p12)
Yazar: [Mehdi Azizi](https://devoria.fr/tr/mehdi-azizi)
Yayın: 2026-11-04
İçeriğin son gözden geçirilmesi: 2026-11-04


Apple'ın push sertifikası, bir sunucunun Apple'ın bildirim servisi APNs üzerinden uygulamana bildirim göndermesine izin verir. İki biçimi var: bir yıl geçerli olan ve tek bir uygulamaya bağlı .p12 sertifikası ya da süresi dolmayan ve hesabındaki tüm uygulamalarda işe yarayan .p8 anahtarı. **Expo kullanıyorsan sertifikaya ihtiyacın yok: EAS ilk build'de sana bir .p8 anahtarı oluşturmayı önerir ve Expo'nun push servisi bunu senin yerine kullanır.**

[Geliştirici sertifikası ve provisioning profile](https://devoria.fr/tr/blog/ios-gelistirici-sertifikasi-provisioning-profile-expo) rehberi push anahtarından birkaç satırla bahsediyor. Burada konuyu sonuna kadar götürüyoruz: iki biçim arasındaki seçim, sandbox ve production ortamları, yenileme ve TestFlight'ta bildirimleri kesen arızalar.

Uygulamalarımı Expo ve EAS ile yayınlıyorum. Solys ve TradaZen, yapılandırmalarında `expo-notifications` eklentisini tanımlıyor: uygulamayı bildirim almaya hazırlayan şey bu eklenti.

## Apple neden sertifika ya da anahtar istiyor

Bir push bildirimi bir sunucudan çıkar (senin sunucun ya da Expo'nunki), APNs'e teslim edilir, APNs de onu iPhone'a ulaştırır. Yani APNs'in bu sunucunun uygulamana yazma hakkı olduğunu doğrulaması gerekir. Apple bunu kanıtlamak için iki yol sunuyor.

- **.p8 anahtarıyla token tabanlı bağlantı.** [Apple'a göre](https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns) daha hızlı, birden fazla sunucudan kullanılabilir ve tek bir anahtar ekibindeki tüm uygulamaları ya da bir kısmını kapsar. Sunucun bu anahtarla bir token imzalar ve bunu en az saatte bir yenilemesi gerekir.
- **.p12 dosyasıyla sertifika tabanlı bağlantı.** [Apple'ın belirttiğine göre](https://developer.apple.com/documentation/usernotifications/establishing-a-certificate-based-connection-to-apns) bu sertifika tek bir uygulamaya bağlı ve bir yıl geçerli. Birden fazla uygulama, birden fazla sertifika demek.

[Apple'ın süre sonlarıyla ilgili sayfası](https://developer.apple.com/support/expiration/) bunu hatırlatıyor: APNs token imzalama anahtarının süresi asla dolmaz.

## .p8 / .p12 tablosu

| Kriter            | .p8 anahtarı             | .p12 sertifikası        |
| ----------------- | ------------------------ | ----------------------- |
| Süre              | Süresi dolmaz            | Bir yıl                 |
| Kapsam            | Tüm uygulamaların        | Tek bir uygulama        |
| Ortam             | Oluştururken seçilir     | Sandbox ve production   |
| Yenileme          | Yok, iptal edilmedikçe   | Her yıl                 |
| İndirme           | Yalnızca bir kez         | Mac'ten dışa aktarma    |
| Sayı              | Ortam başına iki         | Uygulama başına bir     |
| Expo ile kullanım | EAS oluşturur ve yönetir | Expo dokümanlarında yok |

Üç not. .p8 dosyası [yalnızca bir kez indirilebilir](https://developer.apple.com/help/account/keys/create-a-private-key): Apple onu hesabında saklamaz. .p12 ise sertifikayı oluşturan [Mac'in anahtar zincirinden dışa aktarılır](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate). Ortam başına iki anahtar sınırı da ekip anahtarları için geçerli. Belirli uygulamalarla sınırlı anahtarlarda Apple ortam başına 200'e kadar izin veriyor.

[Expo'nun kimlik bilgileri sayfası](https://docs.expo.dev/app-signing/app-credentials/) yalnızca push anahtarından bahsediyor ve hesap başına en fazla iki anahtar sayıyor, ortamları ya da uygulama bazlı anahtarları ayırt etmeden. **Bir Expo uygulaması için doğru seçim .p8 anahtarı.**

## Sandbox ve production: iki ortam

APNs'in iki sunucusu var: development (sandbox da denir) ve production. [Apple](https://developer.apple.com/documentation/usernotifications/sending-notification-requests-to-apns) ilkini testlere, ikincisini yayınlanmış uygulamalara ayırıyor. Uygulama hangisini kullanacağını `aps-environment` entitlement'ı sayesinde bilir. [Apple'a göre](https://developer.apple.com/documentation/bundleresources/entitlements/aps-environment) değeri imzalama profilini takip eder: development profiliyle `development`, distribution profiliyle ve TestFlight için `production`.

**Yani bir TestFlight build'i, tıpkı App Store gibi production ile konuşur.**

Expo tarafında iki ayrıntı var. [expo-notifications dokümanı](https://docs.expo.dev/versions/latest/sdk/notifications/), entitlement'ın projede her zaman `development` olarak yazıldığını, release build'inin arşivinde ise `production`'a çevrildiğini söylüyor. Ayrıca Expo token'ı oluşturulduğunda otomatik algılanan uygulama ortamına bağlanır: gönderirken hiçbir şey seçmen gerekmez.

Anahtarı kendin oluşturursan Apple senden ortamını ve kapsamını sorar: tüm ekip ya da belirli uygulamalar. Geliştirici dokümanı artık sandbox'a ya da production'a sınırlı ekip anahtarlarını anlatıyor, her yerde geçerli eski anahtarlar da kabul edilmeye devam ediyor. [Hesap yardım sayfası](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) ise hâlâ anahtarın iki ortamda da kullanıldığını söylüyor. Apple kendi kendisiyle çelişiyor: oluştururken seçtiğin ortamı esas al. **Yalnızca sandbox'a ayrılmış bir anahtar ne TestFlight'ta ne de App Store'da işe yarar.**

## Expo push anahtarını nasıl yönetiyor

[Expo'nun kurulum rehberine](https://docs.expo.dev/push-notifications/push-notifications-setup/) göre (28 Temmuz 2026'da güncellendi), ilk development build'in sana push bildirimlerini yapılandırmayı ve bir APNs anahtarı oluşturmayı önerir. İkisine de evet de. EAS Build kullanmıyorsan `eas credentials` komutunu çalıştır. Ücretli bir Apple Developer hesabı gerekiyor.

Sonrasında:

- **EAS anahtarı saklar ve uygulamanla ilişkilendirir.** Expo'ya göre bir anahtar istediğin kadar uygulamada kullanılabilir ve yeni bir anahtar yüklemek kullanıcılarının Expo Push token'larını değiştirmez.
- **Sunucun APNs'i çağırmaz.** Expo'nun push servisine gönderir, o da APNs'e iletir. [Expo, gönderimden yaklaşık 15 dakika sonra makbuzları okumanı istiyor](https://docs.expo.dev/push-notifications/sending-notifications/): hatalar orada görünür.
- **Entitlement'ı eklenti ekler.** `expo-notifications`'ı `plugins` içinde tanımla:

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

İki tuzak var. [Expo'nun SSS sayfası](https://docs.expo.dev/push-notifications/faq/), Expo Go'nun SDK 53'ten beri push bildirimlerini desteklemediğini söylüyor, oysa expo-notifications sayfası yalnızca Android'den bahsediyor. Her iki durumda da Expo bir development build öneriyor: testi onunla yap. Ayrıca anahtarı `eas credentials` ile silmek onu Expo'nun sunucularından kaldırır, Apple hesabından değil. Yer açmak için Apple portalında iptal et. Her sır gibi .p8 dosyası da asla deposuna girmemeli: kural [bir Expo uygulamasının API anahtarları](https://devoria.fr/tr/blog/expo-gizli-api-anahtari-koruma) için olanla aynı.

## Yenileme: gerçekte ne sona eriyor

**.p8 anahtarında yenilenecek bir şey yok.** Yalnızca iptal edersen durur. Ele geçirildiğinden şüpheleniyorsan [Apple](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-authentication-tokens) yeni bir anahtar oluşturmanı, ona geçmeni ve ancak ondan sonra eskisini iptal etmeni öneriyor. Expo ile anahtarı değiştirmek için SSS adımları veriyor: `eas credentials`, iOS, build profilin, ardından push anahtarını kaldırıp yenisini oluşturma.

**.p12 sertifikası her yıl sona erer.** Apple, süresi dolmadan güncellemeni ve tarihini anahtar zincirinde takip etmeni istiyor. Süresi dolduğunda ya da iptal edildiğinde uygulamana [artık bildirim gönderemezsin](https://developer.apple.com/help/account/certificates/certificates-overview). Apple ayrı bir yenileme süreci tanımlamıyor: uygulamanın tanımlayıcısından yeni bir sertifika oluşturursun, süre dolmadan sunucuna kurarsın, sonra eskisini kaldırırsın. **En iyi yenileme yine de anahtara geçmek.**

> iPhone'ları Intune ya da başka bir cihaz filosu yönetim aracıyla mı yönetiyorsun? Bu aynı sertifika değil. Cihaz yönetimi push sertifikası Apple Push Certificates Portal üzerinde oluşturulur ve her yıl yenilenir. [Apple](https://support.apple.com/guide/deployment/dep2de55389a), kullanılan Apple hesabını not etmeni öneriyor: yenileme için ona ihtiyacın olacak.

## Tipik arızalar ve çözümleri

### Development'ta çalışıyor, TestFlight'ta çalışmıyor

1. **Yanlış token'a gönderiyorsun.** TestFlight build'i production'a kaydolur ve yeni bir token alır. Development build'inden gelen bir token çalışmaz: [token ortamla eşleşmediğinde](https://developer.apple.com/documentation/usernotifications/handling-notification-responses-from-apns) Apple `BadDeviceToken` döner. Token'ı TestFlight uygulamasının kendisinden al.
2. **Production uygulamasının push kimlik bilgileri yok.** Bu, Expo SSS'sinin teşhisi. expo.dev üzerindeki projenin kimlik bilgileri sayfasını ya da `eas credentials`'ı kontrol et.
3. **Anahtarın sandbox ile sınırlı.** Onu production'da geçerli bir anahtarla değiştir.
4. **iPhone token alamıyor.** TestFlight build'ini bir Xcode build'inin üzerine kurduysan Expo cihazı yeniden başlatmanı öneriyor.

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

Expo SSS'sine göre bu hata, iOS projen için yapılandırılmış bir push anahtarı olmadığını gösteriyor. Kimlik bilgileri sayfasını kontrol et, sonra yeniden build al: EAS o zaman anahtarı oluşturmayı önerir. `expo-notifications`'ın gerçekten `plugins` içinde olduğunu da kontrol et.

### ITMS-90078: Missing Push Notification Entitlement

Apple bu e-postayı gönderimden sonra yollar: uygulaman APNs'e kaydoluyor gibi görünüyor ama imzası `aps-environment` entitlement'ını içermiyor. [Expo'nun SDK 51 notu](https://github.com/expo/fyi/blob/main/apns-entitlement-sdk-51.md) bunu açıklıyor. Bu SDK'dan beri entitlement yalnızca `expo-notifications` kuruluysa ekleniyor. Uyarı Apple'ın iki kontrolünden geliyor. İlki uygulama tanımlayıcının yeteneklerini uygulamanın entitlement'larıyla karşılaştırır. İkincisi binary içinde bildirimlere kaydolma metodunu arar; Expo'nun kodu bu metodu tüm uygulamalarda içerir.

Expo'nun belirttiğine göre **bu bir uyarı, ret değil.** Bildirim kullanıyorsan eklentiyi ekle ve yeniden build al: [EAS, uygulama tanımlayıcısının yeteneklerini](https://docs.expo.dev/build-reference/ios-capabilities/) her build'de senkronize eder. Kullanmıyorsan Apple portalında tanımlayıcından Push Notifications yeteneğini kaldır. Uyarı devam edebilir, bir sonucu yok.

### InvalidCredentials ya da tüm uygulamalar bir anda sessiz

Bir makbuzdaki `InvalidCredentials`, push kimlik bilgilerinin artık geçerli olmadığı anlamına gelir, çoğu zaman anahtar iptal edildiği için. Onu kullanan tüm uygulamalar aynı anda susar. Expo'nun çözümü: `eas credentials`, ardından yeni bir anahtar. Makbuzda `InvalidProviderToken` geçiyorsa Expo, push anahtarını ve profili yeniden oluşturarak build almanı öneriyor.

## Bildirimleri açmadan önce

Yayından önce bildirimleri iPhone'unda test etmek için [uygulamanı test etmek için TestFlight](https://devoria.fr/tr/blog/testflight-iphone-uygulama-test-etme) rehberini izle. Uygulamayı uyandırmak için sessiz bildirimler gönderiyorsan [arka plan modlarıyla ilgili 2.5.4 guideline'ını](https://devoria.fr/tr/blog/guideline-2-5-4-arka-plan-modu-apple-reddi) yeniden oku. Mac olmadan tüm zincir [Mac olmadan iOS uygulaması yayınlamak](https://devoria.fr/tr/blog/mac-olmadan-ios-uygulama-yayinlamak-expo-eas) yazısında, yayın adımları da [App Store'da uygulama yayınlamak](https://devoria.fr/tr/expertise/app-storeda-uygulama-yayinlama) sayfasında.

İlk gönderiminden önce [ücretsiz teşhisi](https://devoria.fr/tr/diagnostic) yap: projende neyin takıldığını söyler ve sana Apple retlerine karşı kontrol listemi gönderir. Uygulamayı geliştirmek, abonelikleri bağlamak ve yayınlamak için [iOS & Android Kit](https://devoria.fr/tr/kits/ios), uygulamalarımın başlangıç koduyla dört adımlık yolu kendi hızında takip ettirir.

## Sık sorulan sorular

### Apple push sertifikasının süresi dolar mı?

.p12 sertifikası bir yıl sonra sona erer ve yenisiyle değiştirilmezse bildirimlerin durur. .p8 anahtarının süresi asla dolmaz: yalnızca iptal edersen durur. Anahtarı tercih etmenin ana nedeni bu.

### Her uygulama için ayrı push sertifikası gerekir mi?

.p12 sertifikasıyla evet: her sertifika tek bir uygulamaya bağlı. Bir .p8 anahtarı hesabındaki tüm uygulamalarda kullanılır. Yani Expo ile tek bir anahtar tüm kataloğunu kapsayabilir.

### Apple push sertifikası nasıl yenilenir?

Uygulamanın tanımlayıcısından, yeni bir imzalama talebiyle yeni bir sertifika oluştur, sunucuna kur, sonra eskisini kaldır. Bunu süre dolmadan yap. En basiti yine de yenileme gerektirmeyen bir .p8 anahtarına geçmek.

### .p8 dosyamı kaybettim, ne yapmalıyım?

Apple onu yalnızca bir kez indirmene izin veriyor. Anahtarı EAS oluşturduysa Expo onu saklıyor ve bildirimlerin devam ediyor. Aksi halde yeni bir anahtar oluştur, `eas credentials` ile ekle, sonra eskisini Apple portalında iptal et. Kullanıcılarının Expo Push token'ları değişmez.

### Push anahtarını değiştirdikten sonra yeniden build almak gerekir mi?

Genelde hayır. Anahtar kurulu uygulamada değil, gönderen sunucuda kullanılır ve Expo yeni bir anahtarın token'ları değiştirmediğini belirtiyor. İstisna: makbuzlar `InvalidProviderToken` bildiriyorsa Expo yeni bir anahtar ve yeni bir profille yeniden build almanı öneriyor.


## Projen

[Review Kit](https://devoria.fr/tr/kits/app-review): App Store inceleme kontrol listem, düzelttiğim Apple retlerim, Google Play kontrol listesi ve üç Claude Code skill'i. ₺2.699.

[iOS & Android Kit](https://devoria.fr/tr/kits/ios): Claude Code ile iPhone ve Android uygulamanı yap: uygulamalarımın başlangıç kodu, mağazalara kadar giden yol ve tüm kitler. ₺5.499.

[Analiz: Seni iPhone uygulamandan ayıran ne?](https://devoria.fr/tr/diagnostic): 7 soru, 60 saniye: iPhone uygulamanı yayınlamanı asıl neyin engellediğini, 4 adımlık yolunu ve sana uygun kiti öğren.
