Sijil pemberitahuan push Apple: .p8 atau .p12 dengan Expo
Oleh Mehdi Azizi
Diterbitkan pada , 8 min
Untuk pemberitahuan push, Apple menawarkan kunci .p8 tanpa tamat tempoh untuk semua app anda, atau sijil .p12 tahunan. Dengan Expo, EAS menguruskan kunci itu.
Sijil push Apple membenarkan sebuah pelayan menghantar pemberitahuan kepada app anda melalui APNs, iaitu perkhidmatan pemberitahuan Apple. Ia wujud dalam dua bentuk: sijil .p12, sah selama setahun dan terikat pada satu app sahaja, atau kunci .p8, yang tidak tamat tempoh dan boleh digunakan untuk semua app dalam akaun anda. Dengan Expo, anda tidak memerlukan sijil itu: EAS menawarkan untuk mencipta kunci .p8 semasa build pertama, dan perkhidmatan push Expo menggunakannya untuk anda.
Panduan tentang sijil pembangun dan provisioning profile menyentuh kunci push dalam beberapa baris sahaja. Di sini, kita pergi hingga ke hujung: pilihan antara dua format, persekitaran sandbox dan production, pembaharuan, dan masalah yang memutuskan pemberitahuan dalam TestFlight.
Saya menerbitkan app saya dengan Expo dan EAS. Solys dan TradaZen mengisytiharkan plugin expo-notifications dalam konfigurasi mereka: plugin inilah yang menyediakan app untuk menerima pemberitahuan.
Kenapa Apple meminta sijil atau kunci
Pemberitahuan push bermula dari pelayan, sama ada pelayan anda atau pelayan Expo, yang menyerahkannya kepada APNs, yang kemudian menghantarnya ke iPhone. Jadi APNs perlu mengesahkan bahawa pelayan itu berhak menghantar mesej kepada app anda. Apple menawarkan dua cara untuk membuktikannya.
- Sambungan berasaskan token, dengan kunci .p8. Menurut Apple, cara ini lebih pantas, boleh digunakan dari beberapa pelayan, dan satu kunci meliputi semua app pasukan anda atau sebahagiannya. Pelayan anda menggunakannya untuk menandatangani token, yang perlu dibuat semula sekurang-kurangnya setiap jam.
- Sambungan berasaskan sijil, dengan fail .p12. Apple menjelaskan bahawa sijil ini terikat pada satu app sahaja dan sah selama setahun. Banyak app, banyak sijil.
Halaman Apple tentang tarikh tamat tempoh mengingatkan perkara ini: kunci tandatangan token APNs tidak pernah tamat tempoh.
Jadual .p8 / .p12
| Kriteria | Kunci .p8 | Sijil .p12 |
|---|---|---|
| Tempoh | Tiada tamat tempoh | Setahun |
| Skop | Semua app anda | Satu app sahaja |
| Persekitaran | Dipilih semasa penciptaan | Sandbox dan production |
| Pembaharuan | Tiada, kecuali dibatalkan | Setiap tahun |
| Muat turun | Sekali sahaja | Eksport dari Mac |
| Bilangan | Dua bagi setiap persekitaran | Satu bagi setiap app |
| Penggunaan dengan Expo | Dicipta dan diurus oleh EAS | Tiada dalam dokumentasi Expo |
Tiga penjelasan. Fail .p8 hanya boleh dimuat turun sekali: Apple tidak menyimpannya dalam akaun anda. Fail .p12 pula dieksport dari keychain Mac yang mencipta sijil itu. Dan had dua kunci bagi setiap persekitaran terpakai pada kunci pasukan. Untuk kunci yang dihadkan pada app tertentu, Apple membenarkan sehingga 200 bagi setiap persekitaran.
Halaman Expo tentang kelayakan hanya menyebut kunci push, dan mengira maksimum dua bagi setiap akaun, tanpa membezakan persekitaran atau kunci mengikut app. Untuk app Expo, kunci .p8 ialah pilihan yang tepat.
Sandbox dan production: dua persekitaran
APNs mempunyai dua pelayan: development, juga dipanggil sandbox, dan production. Apple mengkhaskan yang pertama untuk ujian dan yang kedua untuk app yang diterbitkan. App tahu yang mana satu perlu digunakan melalui entitlement aps-environment. Menurut Apple, nilainya mengikut profil tandatangan: development dengan profil development, production dengan profil distribution dan untuk TestFlight.
Jadi build TestFlight berhubung dengan production, sama seperti App Store.
Di pihak Expo, ada dua perincian. Dokumentasi expo-notifications menyatakan bahawa entitlement sentiasa ditulis sebagai development dalam projek, kemudian ditukar kepada production dalam arkib build release. Dan semasa dicipta, token Expo dikaitkan dengan persekitaran app, yang dikesan secara automatik: anda tidak perlu memilih apa-apa semasa menghantar.
Jika anda mencipta kunci sendiri, Apple akan bertanya persekitaran dan skopnya: seluruh pasukan atau app tertentu. Dokumentasi pembangunnya kini menerangkan kunci pasukan yang dihadkan pada sandbox atau production, manakala kunci lama yang sah di mana-mana masih diterima. Bantuan akaun pula masih menyatakan bahawa kunci itu berfungsi untuk kedua-dua persekitaran. Apple bercanggah dengan dirinya sendiri: ingat persekitaran yang anda pilih semasa penciptaan. Kunci yang dikhaskan untuk sandbox tidak akan berfungsi untuk TestFlight mahupun App Store.
Cara Expo mengurus kunci push
Menurut panduan konfigurasi Expo, dikemas kini pada 28 Julai 2026, build development pertama anda akan menawarkan untuk mengkonfigurasi pemberitahuan push dan menjana kunci APNs. Jawab ya untuk kedua-duanya. Tanpa EAS Build, jalankan eas credentials. Anda memerlukan akaun Apple Developer berbayar.
Seterusnya:
- EAS menyimpan kunci dan mengaitkannya dengan app anda. Menurut Expo, satu kunci boleh digunakan untuk seberapa banyak app yang anda mahu, dan memuat naik kunci baharu tidak mengubah token Expo Push pengguna anda.
- Pelayan anda tidak memanggil APNs. Ia menghantar ke perkhidmatan push Expo, yang meneruskannya ke APNs. Expo meminta anda membaca resit kira-kira 15 minit selepas penghantaran: di situlah ralat dipaparkan.
- Plugin menetapkan entitlement. Isytiharkan
expo-notificationsdalamplugins:
{
"expo": {
"plugins": ["expo-notifications"]
}
}
Dua perangkap. FAQ Expo menyatakan bahawa Expo Go tidak lagi menyokong pemberitahuan push sejak SDK 53, sedangkan halaman expo-notifications hanya menyebut Android. Dalam kedua-dua kes, Expo mengesyorkan build development: uji dengannya. Dan memadam kunci dengan eas credentials hanya mengeluarkannya dari pelayan Expo, bukan dari akaun Apple anda. Untuk mengosongkan slot, batalkannya dalam portal Apple. Seperti semua rahsia, fail .p8 tidak boleh sekali-kali masuk ke repositori anda: peraturannya sama seperti untuk kunci API app Expo.
Pembaharuan: apa yang sebenarnya tamat tempoh
Kunci .p8 tidak perlu diperbaharui. Ia hanya berhenti jika anda membatalkannya. Jika anda rasa kunci itu telah terdedah, Apple mengesyorkan supaya mencipta kunci baharu, beralih kepadanya, dan barulah membatalkan kunci lama. Untuk menggantikan kunci dengan Expo, FAQ memberikan langkahnya: eas credentials, iOS, profil build anda, kemudian buang kunci push dan jana yang baharu.
Sijil .p12 tamat tempoh setiap tahun. Apple meminta anda mengemas kininya sebelum tarikh tamat dan memantau tarikhnya dalam keychain. Setelah tamat tempoh atau dibatalkan, anda tidak lagi boleh menghantar pemberitahuan kepada app anda. Apple tidak menerangkan proses pembaharuan yang berasingan: anda mencipta sijil baharu dari pengecam app, memasangnya pada pelayan anda sebelum tarikh tamat, kemudian membuang sijil lama. Cara pembaharuan terbaik tetap beralih kepada kunci.
Anda mengurus iPhone dengan Intune atau alat pengurusan peranti lain? Itu bukan sijil yang sama. Sijil push pengurusan peranti dicipta di Apple Push Certificates Portal dan diperbaharui setiap tahun. Apple mengesyorkan supaya anda mencatat akaun Apple yang digunakan: ia akan diperlukan untuk pembaharuan.
Masalah biasa dan cara membaikinya
Berfungsi dalam development, tetapi tidak dalam TestFlight
- Anda menghantar ke token yang salah. Build TestFlight mendaftar dalam production dan mendapat token baharu. Token dari build development anda tidak akan berfungsi: Apple membalas
BadDeviceTokenapabila token tidak sepadan dengan persekitaran. Dapatkan token dari app TestFlight itu sendiri. - App production tiada kelayakan push. Ini diagnosis dalam FAQ Expo. Semak halaman kelayakan projek di expo.dev, atau
eas credentials. - Kunci anda dihadkan pada sandbox. Gantikannya dengan kunci yang sah untuk production.
- iPhone tidak mendapat token. Jika anda memasang build TestFlight di atas build Xcode, Expo mencadangkan supaya anda memulakan semula peranti.
"No valid aps-environment entitlement string found"
Menurut FAQ Expo, ralat ini menandakan tiada kunci push dikonfigurasi untuk projek iOS anda. Semak halaman kelayakan, kemudian jalankan build semula: EAS akan menawarkan untuk menjana kunci. Semak juga bahawa expo-notifications memang ada dalam plugins.
ITMS-90078: Missing Push Notification Entitlement
Apple menghantar e-mel ini selepas penghantaran: app anda nampaknya mendaftar dengan APNs, tetapi tandatangannya tidak mengandungi entitlement aps-environment. Nota Expo tentang SDK 51 menerangkannya. Sejak SDK ini, entitlement hanya ditambah jika expo-notifications dipasang. Amaran ini datang daripada dua semakan Apple. Yang pertama membandingkan keupayaan pengecam app anda dengan entitlement app. Yang kedua mengesan dalam binari satu kaedah pendaftaran pemberitahuan, yang terdapat dalam kod Expo bagi semua app.
Ini amaran, bukan penolakan, jelas Expo. Jika anda menggunakan pemberitahuan, tambah plugin dan buat build semula: EAS menyegerakkan keupayaan pengecam app pada setiap build. Jika tidak, buang keupayaan Push Notifications daripada pengecam anda dalam portal Apple. Amaran itu mungkin kekal, tanpa sebarang kesan.
InvalidCredentials atau semua app senyap serentak
InvalidCredentials dalam resit bermaksud kelayakan push anda tidak lagi sah, selalunya kerana kunci telah dibatalkan. Semua app yang menggunakannya senyap pada masa yang sama. Pembetulan Expo: eas credentials, kemudian kunci baharu. Jika resit menyebut InvalidProviderToken, Expo mengesyorkan build semula dengan menjana semula kunci push dan profil.
Sebelum mengaktifkan pemberitahuan
Untuk menguji pemberitahuan pada iPhone anda sebelum pelancaran, ikuti TestFlight untuk menguji app anda. Jika anda menghantar pemberitahuan senyap untuk membangunkan app, baca semula guideline 2.5.4 tentang mod latar belakang. Keseluruhan rantaian, tanpa Mac, ada dalam menerbitkan app iOS tanpa Mac, dan langkah-langkah pelancaran di halaman menerbitkan aplikasi di App Store.
Sebelum penghantaran pertama anda, buat diagnostik percuma: ia memberitahu apa yang menyekat projek anda dan menghantar senarai semak anti-penolakan Apple saya. Untuk membina app, menyambungkan langganan dan menerbitkannya, iOS & Android Kit mengikuti laluan empat langkah dengan kod permulaan app saya, mengikut rentak anda.
Soalan lazim
Adakah sijil push Apple tamat tempoh?
Sijil .p12 tamat tempoh selepas setahun, dan pemberitahuan anda berhenti jika ia tidak diganti. Kunci .p8 tidak pernah tamat tempoh: ia hanya berhenti jika anda membatalkannya. Itulah sebab utama untuk memilih kunci.
Perlukah satu sijil push bagi setiap app?
Dengan sijil .p12, ya: setiap sijil terikat pada satu app sahaja. Kunci .p8 boleh digunakan untuk semua app dalam akaun anda. Jadi dengan Expo, satu kunci boleh meliputi seluruh katalog anda.
Bagaimana untuk memperbaharui sijil push Apple?
Cipta sijil baharu dari pengecam app anda, dengan permintaan tandatangan baharu, pasang pada pelayan anda, kemudian buang sijil lama. Lakukannya sebelum tarikh tamat. Cara paling mudah tetap beralih kepada kunci .p8, yang tidak perlu diperbaharui.
Saya kehilangan fail .p8, apa perlu dibuat?
Apple hanya membenarkan ia dimuat turun sekali. Jika EAS yang mencipta kunci itu, Expo menyimpannya dan pemberitahuan anda terus berfungsi. Jika tidak, cipta kunci baharu, tambahkannya dengan eas credentials, kemudian batalkan kunci lama dalam portal Apple. Token Expo Push pengguna anda tidak berubah.
Perlukah build semula selepas menukar kunci push?
Secara umumnya, tidak. Kunci digunakan oleh pelayan yang menghantar, bukan oleh app yang dipasang, dan Expo menyatakan bahawa kunci baharu tidak mengubah token. Pengecualian: jika resit melaporkan InvalidProviderToken, Expo mengesyorkan build semula dengan kunci baharu dan profil baharu.

