Sertifikat push notification Apple: .p8 atau .p12 di Expo
Oleh Mehdi Azizi
Terbit , 8 mnt
Untuk push notification, Apple menawarkan kunci .p8 tanpa kedaluwarsa untuk semua app, atau sertifikat .p12 tahunan. Di Expo, EAS yang mengelola kuncinya.
Sertifikat push Apple mengizinkan sebuah server mengirim notifikasi ke app kamu lewat APNs, layanan notifikasi milik Apple. Bentuknya ada dua: sertifikat .p12, berlaku satu tahun dan terikat ke satu app saja, atau kunci .p8, yang tidak kedaluwarsa dan bisa dipakai semua app di akunmu. Dengan Expo, kamu tidak butuh sertifikat: EAS menawarkan pembuatan kunci .p8 saat build pertama, dan layanan push Expo memakainya untukmu.
Panduan tentang sertifikat developer dan provisioning profile hanya membahas kunci push dalam beberapa baris. Di sini kita bahas tuntas: pilihan antara kedua format, environment sandbox dan production, perpanjangan, dan masalah yang membuat notifikasi mati di TestFlight.
Saya merilis app saya dengan Expo dan EAS. Solys dan TradaZen mendeklarasikan plugin expo-notifications di konfigurasinya: plugin inilah yang menyiapkan app untuk menerima notifikasi.
Kenapa Apple meminta sertifikat atau kunci
Push notification berangkat dari server, entah server kamu atau milik Expo, yang menyerahkannya ke APNs, lalu APNs mengantarkannya ke iPhone. Jadi APNs harus memastikan server itu berhak mengirim ke app kamu. Apple menyediakan dua cara untuk membuktikannya.
- Koneksi berbasis token, dengan kunci .p8. Menurut Apple, cara ini lebih cepat, bisa dipakai dari beberapa server, dan satu kunci bisa mencakup semua app di tim kamu atau sebagian. Server kamu memakai kunci ini untuk menandatangani token, yang harus dibuat ulang setidaknya setiap jam.
- Koneksi berbasis sertifikat, dengan file .p12. Apple menjelaskan bahwa sertifikat ini terikat ke satu app saja dan berlaku satu tahun. Banyak app, banyak sertifikat.
Halaman Apple tentang masa berlaku mengingatkan: kunci penandatanganan token APNs tidak pernah kedaluwarsa.
Tabel .p8 / .p12
| Kriteria | Kunci .p8 | Sertifikat .p12 |
|---|---|---|
| Masa berlaku | Tidak kedaluwarsa | Satu tahun |
| Cakupan | Semua app kamu | Satu app saja |
| Environment | Dipilih saat dibuat | Sandbox dan production |
| Perpanjangan | Tidak ada, kecuali dicabut | Setiap tahun |
| Unduhan | Hanya sekali | Ekspor dari Mac |
| Jumlah | Dua per environment | Satu per app |
| Pemakaian di Expo | Dibuat dan dikelola EAS | Tidak ada di dokumentasi Expo |
Tiga catatan. File .p8 hanya bisa diunduh sekali: Apple tidak menyimpannya di akunmu. Sementara .p12 diekspor dari Keychain di Mac yang membuat sertifikatnya. Dan batas dua kunci per environment berlaku untuk kunci tim. Untuk kunci yang dibatasi ke app tertentu, Apple mengizinkan sampai 200 per environment.
Halaman Expo tentang kredensial hanya membahas kunci push, dan menyebut maksimal dua per akun, tanpa membedakan environment atau kunci per app. Untuk app Expo, kunci .p8 adalah pilihan yang tepat.
Sandbox dan production: dua environment
APNs punya dua server: development, disebut juga sandbox, dan production. Apple memakai yang pertama untuk pengujian dan yang kedua untuk app yang sudah rilis. App tahu server mana yang dipakai lewat entitlement aps-environment. Menurut Apple, nilainya mengikuti profil signing: development dengan profil development, production dengan profil distribusi dan untuk TestFlight.
Jadi build TestFlight berkomunikasi dengan production, persis seperti App Store.
Di sisi Expo, ada dua detail. Dokumentasi expo-notifications menyebutkan bahwa entitlement selalu ditulis development di proyek, lalu diubah ke production di arsip build release. Lalu saat dibuat, token Expo dikaitkan ke environment app yang terdeteksi otomatis: kamu tidak perlu memilih apa pun saat mengirim.
Kalau kamu membuat kunci sendiri, Apple akan menanyakan environment dan cakupannya: seluruh tim atau app tertentu. Dokumentasi developernya sekarang menjelaskan kunci tim yang dibatasi ke sandbox atau production, sementara kunci lama yang berlaku di mana saja tetap diterima. Sedangkan bantuan akun masih menyatakan kunci berlaku untuk kedua environment. Apple saling bertentangan: pegang environment yang kamu pilih saat membuat kunci. Kunci khusus sandbox tidak akan berfungsi untuk TestFlight maupun App Store.
Cara Expo mengelola kunci push
Menurut panduan setup Expo, yang diperbarui 28 Juli 2026, build development pertamamu akan menawarkan setup push notification dan pembuatan kunci APNs. Jawab ya untuk keduanya. Tanpa EAS Build, jalankan eas credentials. Kamu butuh akun Apple Developer berbayar.
Setelah itu:
- EAS menyimpan kunci dan mengaitkannya ke app kamu. Menurut Expo, satu kunci bisa dipakai untuk app sebanyak yang kamu mau, dan mengunggah kunci baru tidak mengubah token Expo Push pengguna kamu.
- Server kamu tidak memanggil APNs. Server mengirim ke layanan push Expo, yang meneruskannya ke APNs. Expo memintamu membaca receipt sekitar 15 menit setelah pengiriman: di situlah error muncul.
- Plugin memasang entitlement. Deklarasikan
expo-notificationsdiplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Dua jebakan. FAQ Expo menyatakan Expo Go tidak lagi mendukung push notification sejak SDK 53, sementara halaman expo-notifications hanya menyebut Android. Apa pun itu, Expo menyarankan build development: uji dengan itu. Lalu, menghapus kunci dengan eas credentials hanya menghapusnya dari server Expo, bukan dari akun Apple kamu. Untuk mengosongkan slot, cabut (revoke) kunci itu di portal Apple. Seperti semua rahasia, file .p8 tidak boleh berakhir di repo kamu: aturannya sama dengan kunci API di app Expo.
Perpanjangan: apa yang benar-benar kedaluwarsa
Kunci .p8 tidak perlu diperpanjang. Kunci hanya berhenti kalau kamu mencabutnya. Kalau kamu curiga kunci bocor, Apple menyarankan membuat kunci baru, beralih ke kunci itu, baru kemudian mencabut yang lama. Untuk mengganti kunci di Expo, FAQ-nya memberi langkahnya: eas credentials, iOS, profil build kamu, lalu hapus kunci push dan buat yang baru.
Sertifikat .p12 kedaluwarsa setiap tahun. Apple meminta kamu memperbaruinya sebelum jatuh tempo dan memantau tanggalnya di Keychain. Begitu kedaluwarsa atau dicabut, kamu tidak bisa lagi mengirim notifikasi ke app kamu. Apple tidak menjelaskan proses perpanjangan tersendiri: kamu membuat sertifikat baru dari identifier app, memasangnya di server sebelum jatuh tempo, lalu menghapus yang lama. Perpanjangan terbaik tetaplah beralih ke kunci.
Kamu mengelola iPhone dengan Intune atau tool manajemen perangkat lain? Itu sertifikat yang berbeda. Sertifikat push untuk manajemen perangkat dibuat di Apple Push Certificates Portal dan diperpanjang setiap tahun. Apple menyarankan mencatat akun Apple yang dipakai: akun itu dibutuhkan saat perpanjangan.
Masalah umum dan cara memperbaikinya
Jalan di development, tidak di TestFlight
- Kamu mengirim ke token yang salah. Build TestFlight mendaftar di production dan mendapat token baru. Token dari build development tidak akan berfungsi: Apple membalas
BadDeviceTokenketika token tidak cocok dengan environment. Ambil token dari app TestFlight itu sendiri. - App production tidak punya kredensial push. Ini diagnosis dari FAQ Expo. Cek halaman kredensial proyek di expo.dev, atau
eas credentials. - Kunci kamu dibatasi ke sandbox. Ganti dengan kunci yang berlaku di production.
- iPhone tidak mendapat token. Kalau kamu memasang build TestFlight di atas build Xcode, Expo menyarankan untuk me-restart perangkat.
"No valid aps-environment entitlement string found"
Menurut FAQ Expo, error ini menandakan tidak ada kunci push yang dikonfigurasi untuk proyek iOS kamu. Cek halaman kredensial, lalu jalankan build lagi: EAS akan menawarkan pembuatan kunci. Pastikan juga expo-notifications ada di plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple mengirim email ini setelah upload: app kamu tampaknya mendaftar ke APNs, tetapi signature-nya tidak berisi entitlement aps-environment. Catatan Expo tentang SDK 51 menjelaskannya. Sejak SDK itu, entitlement hanya ditambahkan kalau expo-notifications terpasang. Peringatan ini berasal dari dua pemeriksaan Apple. Yang pertama membandingkan capability di identifier app dengan entitlement app. Yang kedua mendeteksi di binary sebuah method pendaftaran notifikasi, yang ada di kode Expo di semua app.
Ini peringatan, bukan penolakan, tegas Expo. Kalau kamu memakai notifikasi, tambahkan plugin dan build ulang: EAS menyinkronkan capability identifier app di setiap build. Kalau tidak, hapus capability Push Notifications dari identifier kamu di portal Apple. Peringatannya bisa tetap muncul, tanpa dampak apa pun.
InvalidCredentials atau semua app mendadak diam
InvalidCredentials di receipt berarti kredensial push kamu sudah tidak valid, sering kali karena kuncinya dicabut. Semua app yang memakainya berhenti menerima notifikasi bersamaan. Solusi dari Expo: eas credentials, lalu buat kunci baru. Kalau receipt menyebut InvalidProviderToken, Expo menyarankan build ulang sambil membuat ulang kunci push dan profilnya.
Sebelum mengaktifkan notifikasi
Untuk menguji notifikasi di iPhone kamu sebelum rilis, ikuti TestFlight untuk menguji app kamu. Kalau kamu mengirim notifikasi silent untuk membangunkan app, baca lagi guideline 2.5.4 tentang mode background. Seluruh alurnya, tanpa Mac, ada di merilis app iOS tanpa Mac, dan langkah-langkah rilisnya di halaman merilis aplikasi di App Store.
Sebelum pengiriman pertamamu, coba diagnostik gratis: diagnostik ini memberi tahu apa yang menghambat proyekmu dan mengirimkan checklist anti-penolakan Apple milik saya. Untuk membangun app, memasang langganan, dan merilisnya, iOS & Android Kit memandu alurnya dalam empat tahap dengan kode awal dari app-app saya, sesuai kecepatanmu.
Pertanyaan umum
Apakah sertifikat push Apple bisa kedaluwarsa?
Sertifikat .p12 kedaluwarsa setelah satu tahun, dan notifikasimu berhenti kalau tidak diganti. Kunci .p8 tidak pernah kedaluwarsa: kunci hanya berhenti kalau kamu mencabutnya. Inilah alasan utama untuk memilih kunci.
Apakah perlu satu sertifikat push per app?
Dengan sertifikat .p12, ya: setiap sertifikat terikat ke satu app. Kunci .p8 bisa dipakai semua app di akunmu. Jadi di Expo, satu kunci bisa mencakup seluruh katalog app kamu.
Bagaimana cara memperpanjang sertifikat push Apple?
Buat sertifikat baru dari identifier app kamu, dengan certificate signing request baru, pasang di server, lalu hapus yang lama. Lakukan sebelum jatuh tempo. Cara paling mudah tetaplah beralih ke kunci .p8, yang tidak perlu diperpanjang.
File .p8 saya hilang, apa yang harus dilakukan?
Apple hanya mengizinkan unduhan sekali. Kalau kuncinya dibuat oleh EAS, Expo menyimpannya dan notifikasimu tetap berjalan. Kalau tidak, buat kunci baru, tambahkan dengan eas credentials, lalu cabut yang lama di portal Apple. Token Expo Push pengguna kamu tidak berubah.
Apakah perlu build ulang setelah mengganti kunci push?
Biasanya tidak. Kunci dipakai oleh server pengirim, bukan oleh app yang terpasang, dan Expo menyatakan kunci baru tidak mengubah token. Pengecualian: kalau receipt melaporkan InvalidProviderToken, Expo menyarankan build ulang dengan kunci baru dan profil baru.

