APNS (Apple Push Notification Service) — adalah layanan infrastruktur Apple untuk mengirimkan notifikasi push ke perangkat ekosistem: iPhone, iPad, Mac, Apple Watch, dan Apple TV. Layanan ini memastikan pengiriman pesan yang andal melalui koneksi TLS permanen antara perangkat dan server Apple. Menurut Apple Developer Documentation, APNS menggunakan protokol HTTP/2 untuk komunikasi dua arah dengan server aplikasi.
Poin Utama
Apple Push Notification Service (APNS) — adalah layanan milik Apple untuk merutekan notifikasi push dari server aplikasi ke perangkat pengguna. Tidak seperti FCM, APNS tidak mendukung Android atau platform lain — sepenuhnya terikat pada ekosistem Apple.
Layanan ini bekerja melalui koneksi TLS permanen yang dibuat setiap perangkat Apple dengan server APNS saat dinyalakan. Koneksi ini dipertahankan di latar belakang dan digunakan untuk mengirimkan notifikasi dengan latensi minimal.
APNS menangani seluruh infrastruktur pengiriman: enkripsi, autentikasi, prioritisasi, dan pengiriman ulang jika perangkat tidak tersedia. Pengembang hanya perlu memberikan payload yang diformat dengan benar dan push token yang valid.
Awalnya APNS bekerja melalui protokol biner pada port 2195–2196. Sejak 2015, Apple beralih ke protokol modern HTTP/2 yang mendukung multipleksing, kompresi header, dan notifikasi push server. HTTP/2 menjadi wajib sejak Juni 2020.
Proses pengiriman notifikasi push melalui APNS terdiri dari lima tahap: pendaftaran perangkat, mendapatkan push token, pengiriman permintaan oleh server, perutean APNS, dan pengiriman ke perangkat.
Jika perangkat tidak tersedia (mati atau tanpa jaringan), APNS menyimpan pesan terakhir untuk setiap aplikasi dan mengirimkannya saat koneksi pulih. Maksimum penyimpanan — 4 minggu, setelah itu pesan dihapus.
Apple mendukung dua metode autentikasi server aplikasi saat mengirim notifikasi push. Setiap metode memiliki karakteristik sendiri terkait masa berlaku, pengelolaan, dan kemudahan penggunaan.
| Parameter | Token-based (p8) | Certificate-based (.p12) |
|---|---|---|
| Masa berlaku | Tak terbatas (kunci tidak kedaluwarsa) | Terbatas masa sertifikat (biasanya 1 tahun) |
| Rotasi | Tidak diperlukan jika kunci tidak dikompromikan | Penggantian tahunan wajib |
| Multi-aplikasi | Satu kunci untuk semua aplikasi akun | Sertifikat terpisah untuk setiap aplikasi |
| Lingkungan | Satu kunci untuk Sandbox dan Production | Sertifikat berbeda untuk Sandbox dan Production |
Token-based autentikasi — metode yang direkomendasikan Apple sejak 2019. Anda membuat satu kunci p8 di Apple Developer Console, memuatnya ke server, dan menandatangani setiap permintaan APNS dengannya. Kunci tidak kedaluwarsa dan berfungsi untuk semua aplikasi akun Anda.
Untuk proyek baru, Token-based autentikasi jelas lebih disukai: satu kunci p8 untuk seluruh akun, tak terbatas, tanpa ketergantungan lingkungan. Certificate-based (.p12) masih digunakan di proyek lama, tetapi memerlukan penggantian tahunan dan sertifikat terpisah untuk Sandbox dan Production. Pertimbangkan masa berlaku sertifikat saat merencanakan CI/CD.
APNS mendukung tiga jenis notifikasi push yang berbeda dalam perilaku di perangkat dan persyaratan atribut permintaan. Pemilihan jenis tergantung pada skenario UX dan urgensi pesan.
Untuk notifikasi Background, Anda harus menyertakan kunci content-available: 1 dan menetapkan prioritas 5 (pengiriman hemat energi). Sistem dapat membatasi jumlah notifikasi latar belakang jika aplikasi tidak memprosesnya tepat waktu.
APNS mendukung dua nilai prioritas: 10 (pengiriman segera) dan 5 (hemat energi). Untuk notifikasi alert gunakan 10 — pengguna harus menerimanya segera. Untuk background gunakan 5 — sistem dapat menunda pengiriman untuk menghemat baterai. Prioritas yang salah untuk background dapat menyebabkan penolakan notifikasi oleh APNS.
APNS menerima payload dalam format JSON dengan ukuran maksimum 4 KB untuk notifikasi biasa dan 5 KB untuk VOIP. Payload berisi kamus wajib aps dengan pengaturan tampilan dan bidang kustom opsional.
{
"aps": {
"alert": {
"title": "Pesan baru",
"body": "Anda memiliki 3 obrolan belum dibaca"
},
"badge": 3,
"sound": "default",
"category": "message_category",
"thread-id": "chat_room_42"
},
"customData": {
"chatId": "42"
}
}
Kunci thread-id mengelompokkan notifikasi di Pusat Notifikasi iOS. Kunci category menghubungkan notifikasi dengan UNNotificationCategory untuk menampilkan tombol aksi. Tanpa kunci-kunci ini, semua notifikasi ditampilkan secara terpisah.
Selain kamus wajib aps, payload APNS dapat berisi bidang kustom di tingkat teratas. Bidang-bidang ini dapat diakses oleh aplikasi melalui kamus userInfo saat memproses notifikasi. Data kustom berguna untuk mengirimkan ID entitas, layar, atau tautan. Ukuran maksimum payload adalah 4 KB, jadi hindari mengirim data dalam jumlah besar melalui push; muat melalui API setelah notifikasi dibuka.
Untuk mengirim notifikasi push di server, Anda perlu melakukan permintaan POST ke endpoint APNS dengan header autentikasi yang benar. Di bawah ini adalah contoh dalam Node.js menggunakan autentikasi Token-based.
const http2 = require("http2")
const fs = require("fs")
const jwt = require("jsonwebtoken")
const token = jwt.sign(
{ iss: "TEAM_ID", iat: Math.floor(Date.now() / 1000) },
fs.readFileSync("AuthKey.p8"),
{ algorithm: "ES256", keyid: "KEY_ID" }
)
const payload = JSON.stringify({
aps: { alert: { title: "Halo!", body: "Push tes" } }
})
const client = http2.connect(
"https://api.push.apple.com"
)
const req = client.request({
":method": "POST",
":path": "/3/device/DEVICE_PUSH_TOKEN",
"authorization": "bearer " + token,
"apns-push-type": "alert",
"apns-topic": "com.example.app",
"apns-priority": "10"
})
req.end(payload)
req.on("response", (headers) => {
if (headers[":status"] === 200) {
console.log("Push berhasil dikirim")
}
})
Setelah pengiriman, APNS mengembalikan status HTTP 200 jika berhasil atau kode kesalahan dengan deskripsi di badan respons. Penting untuk menangani kesalahan token-unregistered (410) — token tersebut harus dihapus dari server karena aplikasi telah dihapus dari perangkat.
APNS mengembalikan status HTTP untuk setiap permintaan pengiriman. Pengiriman berhasil — status 200. Kesalahan memerlukan strategi penanganan yang berbeda. BadDeviceToken (400) atau Unregistered (410) — token perangkat kedaluwarsa, harus dihapus dari server. PayloadTooLarge (413) — batas 4 KB terlampaui, persingkat payload.
Kesalahan TooManyRequests (429) — batas permintaan terlampaui. APNS menetapkan kuota pada jumlah pengiriman per detik. Saat menerima 429, Anda perlu menerapkan penundaan eksponensial (exponential backoff) dan mencoba kembali. Disarankan tidak melebihi 100 permintaan per detik per koneksi HTTP/2.
Kesalahan dari sisi APNS — 500 dan 503 (Internal Server Error / Service Unavailable). Ini adalah gangguan sementara infrastruktur Apple. Dalam kasus seperti itu, ulangi pengiriman dengan penundaan 1–5 detik, maksimal 3 kali percobaan. Kesalahan 5xx konstan pada server yang berfungsi penuh jarang terjadi dan biasanya terkait dengan masalah koneksi TLS.
Untuk lingkungan Production, Anda harus mengimplementasikan pencatatan semua kesalahan APNS dengan menyertakan token, kode kesalahan, dan waktu. Ini akan membantu mengidentifikasi masalah dengan sertifikat, kuota, atau token perangkat tertentu secara cepat. Periksa masa berlaku sertifikat secara teratur jika Anda menggunakan autentikasi Certificate-based.
Pertanyaan yang Sering Diajukan
APNS bekerja melalui TCP 443 (HTTPS) untuk HTTP/2 API. Sebelumnya port 2195 dan 2196 digunakan untuk protokol biner. Sejak Juni 2020, Apple mewajibkan penggunaan HTTP/2 secara eksklusif di port 443. Pastikan server memiliki akses ke api.push.apple.com.
Sandbox — lingkungan pengujian APNS untuk debugging notifikasi push. Production — lingkungan produksi untuk pengguna nyata. Dengan autentikasi Token-based, satu kunci berfungsi untuk kedua lingkungan — endpoint berbeda: api.sandbox.push.apple.com atau api.push.apple.com.
Push token dapat berubah saat: memulihkan aplikasi dari cadangan, menginstal ulang aplikasi, memperbarui sistem operasi, mereset pengaturan jaringan. Token tidak berubah pada pembaruan aplikasi biasa melalui App Store. Server harus menangani kesalahan BadDeviceToken (400) sebagai sinyal untuk menghapus token.
4 KB (4096 byte) untuk notifikasi alert/background biasa. Untuk VOIP melalui PushKit — 5 KB (5120 byte). Melebihi ukuran akan mengembalikan kesalahan PayloadTooLarge (413). Disarankan untuk menjaga payload tetap minimal dan memuat data tambahan melalui server.
APNS tidak dapat mengirimkan notifikasi ke perangkat tanpa koneksi internet. Jika perangkat offline, APNS menyimpan pesan terakhir (per aplikasi per perangkat) hingga 28 hari. Saat koneksi pulih, pesan segera dikirimkan. Pesan yang lebih lama tidak disimpan.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga