Ringkasan APN
Layanan Pemberitahuan Push Apple (APN) adalah inti dari fitur pemberitahuan jarak jauh. Ini adalah layanan yang kuat, aman, dan sangat efisien bagi pengembang aplikasi untuk menyebarkan informasi ke perangkat iOS (dan, secara tidak langsung, watchOS), tvOS, dan macOS.
Pada peluncuran awal aplikasi Anda di perangkat pengguna, sistem secara otomatis membuat koneksi IP yang terakreditasi, terenkripsi, dan persisten antara aplikasi Anda dan APN. Koneksi ini memungkinkan aplikasi Anda melakukan penyiapan untuk mengaktifkannya menerima notifikasi, seperti yang dijelaskan dalam Mengonfigurasi Dukungan Notifikasi Jarak Jauh.
Separuh koneksi lainnya untuk mengirim pemberitahuan — saluran yang tetap dan aman antara server penyedia dan APN — memerlukan konfigurasi di akun pengembang online Anda dan penggunaan sertifikat kriptografi yang disediakan Apple. Penyedia adalah server, yang Anda terapkan dan kelola, yang Anda konfigurasikan untuk bekerja dengan APN. Gambar 1-1 menunjukkan jalur pengiriman notifikasi jarak jauh.
Gambar 1-1 Mengirimkan notifikasi jarak jauh dari penyedia ke aplikasi
Dengan penyiapan notifikasi push selesai di penyedia Anda dan di aplikasi Anda, penyedia Anda kemudian dapat mengirim permintaan notifikasi ke APN. APN menyampaikan payload notifikasi yang sesuai ke setiap perangkat yang ditargetkan. Saat menerima notifikasi, sistem mengirimkan payload ke aplikasi yang sesuai di perangkat, dan mengelola interaksi dengan pengguna.
Jika pemberitahuan untuk aplikasi Anda datang dengan perangkat dihidupkan tetapi dengan aplikasi tidak berjalan, sistem masih dapat menampilkan pemberitahuan tersebut. Jika perangkat dimatikan saat APN mengirim notifikasi, APN menahan notifikasi tersebut dan mencoba lagi nanti (untuk detailnya, lihat Quality of Service, Store-and-Forward, dan Coalesced Notifications).
Tanggung Jawab Penyedia
Server penyedia Anda memiliki tanggung jawab berikut untuk berpartisipasi dengan APN:
- Menerima, melalui APN, token perangkat khusus aplikasi yang unik secara global, dan data relevan lainnya dari instance aplikasi Anda pada perangkat pengguna. Ini memungkinkan penyedia untuk mengetahui tentang setiap instance aplikasi Anda yang sedang berjalan.
- Menentukan, sesuai dengan desain sistem notifikasi Anda, kapan notifikasi jarak jauh perlu dikirim ke setiap perangkat.
- Membangun dan mengirim permintaan notifikasi ke APN, setiap permintaan berisi payload notifikasi dan informasi pengiriman; APN kemudian mengirimkan notifikasi yang sesuai ke perangkat yang dimaksud atas nama Anda.
Untuk setiap permintaan notifikasi jarak jauh yang dikirim penyedia, itu harus:
- Buat kamus JSON yang berisi payload notifikasi, seperti yang dijelaskan dalam Membuat Payload Notifikasi Jarak Jauh.
- Tambahkan payload, token perangkat unik global, dan informasi pengiriman lainnya ke permintaan HTTP / 2. Untuk informasi tentang token perangkat, lihat APNs-to-Device Connection Trust dan Device Token. Untuk informasi tentang format permintaan HTTP / 2, serta kemungkinan respons dan kesalahan dari APN, lihat Berkomunikasi dengan APN.
- Kirim permintaan HTTP / 2 ke APN, termasuk kredensial kriptografi dalam bentuk token atau sertifikat, melalui saluran yang tetap dan aman.
- Membuat saluran aman ini dijelaskan di Arsitektur Keamanan.
Menggunakan Banyak Penyedia
Gambar 1-2 menggambarkan jenis jaringan virtual yang diaktifkan APN untuk perangkat yang menjalankan aplikasi Anda. Untuk menangani beban notifikasi, Anda biasanya akan menerapkan beberapa penyedia, masing-masing dengan koneksi persisten dan aman sendiri ke APN. Setiap penyedia kemudian dapat mengirim permintaan notifikasi yang menargetkan perangkat apa pun yang token perangkatnya valid oleh penyedia.
Gambar 1-2 Mendorong notifikasi jarak jauh dari beberapa penyedia ke beberapa perangkat
Kualitas Layanan, Simpan-dan-Maju, dan Pemberitahuan Gabungan
Layanan Apple Push Notification mencakup komponen Quality of Service (QoS) yang menjalankan fungsi simpan-dan-teruskan. Jika APN mencoba mengirimkan pemberitahuan dan perangkat tujuan sedang offline, APN menyimpan pemberitahuan untuk jangka waktu terbatas dan mengirimkannya saat perangkat tersedia lagi. Komponen ini hanya menyimpan notifikasi terbaru per perangkat dan per aplikasi. Jika perangkat sedang offline, mengirimkan permintaan notifikasi yang menargetkan perangkat tersebut menyebabkan permintaan sebelumnya dibuang. Jika perangkat tetap offline untuk waktu yang lama, semua notifikasi yang disimpan di APN akan dibuang.
Untuk memungkinkan penggabungan pemberitahuan serupa, Anda bisa menyertakan pengenal penciutan dalam permintaan pemberitahuan. Biasanya, saat perangkat online, setiap permintaan notifikasi yang Anda kirim ke APN menghasilkan notifikasi yang dikirim ke perangkat. Namun, ketika kunci apns-collapse-id ada di header permintaan HTTP / 2 Anda, APN menggabungkan permintaan yang nilainya sama untuk kunci tersebut. Misalnya, layanan berita yang mengirimkan judul yang sama dua kali bisa menggunakan nilai pengenal penciutan yang sama untuk kedua permintaan. APN kemudian akan menggabungkan dua permintaan menjadi satu notifikasi untuk dikirim ke perangkat. Untuk detail tentang kunci apns-collapse-id.
Arsitektur Keamanan
APN memberlakukan validasi dan autentikasi kriptografi ujung ke ujung menggunakan dua tingkat kepercayaan: kepercayaan koneksi dan kepercayaan token perangkat.
Kepercayaan koneksi berfungsi antara penyedia dan APN, dan antara APN dan perangkat.
Kepercayaan token perangkat bekerja secara menyeluruh untuk setiap notifikasi jarak jauh. Ini memastikan bahwa notifikasi hanya dirutekan antara titik awal (penyedia) dan akhir (perangkat) yang benar.
Token perangkat adalah contoh NSData buram yang berisi pengenal unik yang ditetapkan oleh Apple ke aplikasi tertentu di perangkat tertentu. Hanya APN yang dapat mendekode dan membaca konten token perangkat. Setiap instance aplikasi menerima token perangkat uniknya ketika mendaftar dengan APN, dan kemudian harus meneruskan token tersebut ke penyedia, seperti yang dijelaskan dalam Mengonfigurasi Dukungan Notifikasi Jarak Jauh. Penyedia harus menyertakan token perangkat di setiap permintaan notifikasi push yang menargetkan perangkat terkait; APN menggunakan token perangkat untuk memastikan notifikasi hanya dikirimkan ke kombinasi perangkat aplikasi unik yang dimaksudkan.
APN dapat mengeluarkan token perangkat baru karena berbagai alasan:
- Pengguna menginstal aplikasi Anda di perangkat baru
- Pengguna memulihkan perangkat dari cadangan
- Pengguna menginstal ulang sistem operasi
- Peristiwa yang ditentukan sistem lainnya
Akibatnya, aplikasi harus meminta token perangkat pada waktu peluncuran, seperti yang dijelaskan dalam APNs-to-Device Connection Trust dan Device Token. Untuk contoh kode, lihat Mendaftar untuk Menerima Pemberitahuan Jarak Jauh.
Untuk membuat sesi TLS berbasis HTTP / 2 dengan APN, Anda harus memastikan bahwa sertifikat akar GeoTrust Global CA diinstal pada setiap penyedia Anda. Jika penyedia menjalankan macOS, sertifikat root ini ada di rantai kunci secara default. Di sistem lain, sertifikat ini mungkin memerlukan penginstalan eksplisit. Anda dapat mengunduh sertifikat ini dari situs web GeoTrust Root Certificates. Ini adalah tautan langsung ke sertifikat.
Gambar 1-3 mengilustrasikan penggunaan API penyedia APN berbasis HTTP / 2 untuk membangun kepercayaan, dan menggunakan token autentikasi penyedia JWT untuk mengirim notifikasi.
Gambar 1-3 Membangun dan menggunakan kepercayaan koneksi penyedia berbasis token
Seperti yang ditunjukkan pada Gambar 1-3, kepercayaan penyedia berbasis token berfungsi sebagai berikut:
Penyedia Anda meminta koneksi aman dengan APN menggunakan keamanan lapisan transportasi (TLS), yang direpresentasikan sebagai panah berlabel "inisiasi TLS" pada gambar.
APN kemudian memberi penyedia Anda sertifikat APN, yang diwakili oleh panah berikutnya pada gambar (berlabel "sertifikat APN"), yang kemudian divalidasi oleh penyedia Anda.
Pada titik ini, kepercayaan koneksi dibuat dan server penyedia Anda diaktifkan untuk mengirim permintaan notifikasi push jarak jauh berbasis token ke APN. Setiap permintaan notifikasi yang dikirim penyedia Anda harus disertai dengan token autentikasi JWT, yang ditunjukkan dalam gambar sebagai panah berlabel "Notification push".
APN membalas setiap dorongan, yang ditunjukkan dalam gambar sebagai panah berlabel "respons HTTP / 2".
Untuk detail tentang respons yang dapat diterima penyedia Anda untuk langkah ini, lihat Respons HTTP / 2 dari APN.
Gambar 1-4 mengilustrasikan penggunaan sertifikat SSL yang diterbitkan Apple untuk membangun kepercayaan antara penyedia dan APN. Tidak seperti Gambar 1-3, gambar ini tidak menampilkan push notifikasi itu sendiri, tetapi berhenti pada pembuatan koneksi Transport Layer Security (TLS). Dalam skema kepercayaan berbasis sertifikat, permintaan pemberitahuan push tidak diautentikasi tetapi divalidasi menggunakan token perangkat yang menyertai.
Gambar 1-4 Membangun kepercayaan koneksi penyedia berbasis sertifikat
Seperti yang ditunjukkan pada Gambar 1-4, kepercayaan penyedia-ke-APN berbasis sertifikat berfungsi sebagai berikut:
Penyedia Anda meminta koneksi aman dengan APN menggunakan keamanan lapisan transportasi (TLS), yang direpresentasikan sebagai panah berlabel "inisiasi TLS" pada gambar.
APN kemudian memberi penyedia Anda sertifikat APN, yang diwakili oleh panah berikutnya pada gambar (berlabel "sertifikat APN"), yang kemudian divalidasi oleh penyedia Anda.
Penyedia Anda kemudian harus mengirimkan sertifikat penyedia yang disediakan Apple (yang sebelumnya telah Anda peroleh dari akun pengembang online Anda, seperti yang dijelaskan dalam "Membuat sertifikat SSL klien APN universal" di Bantuan Xcode) kembali ke APN, yang ditunjukkan sebagai tanda panah berlabel "Penyedia sertifikat."
APN kemudian memvalidasi sertifikat penyedia Anda, dengan demikian mengonfirmasi bahwa permintaan koneksi berasal dari penyedia yang sah, dan membuat koneksi TLS Anda.
Pada titik ini, kepercayaan koneksi dibuat dan server penyedia Anda diaktifkan untuk mengirim permintaan notifikasi push jarak jauh berbasis sertifikat ke APN.
Kepercayaan Sambungan APN ke Perangkat dan Token Perangkat
Kepercayaan antara APN dan setiap perangkat dibuat secara otomatis, tanpa partisipasi oleh aplikasi Anda, seperti yang dijelaskan di bagian ini.
Setiap perangkat memiliki sertifikat kriptografi dan kunci kriptografi pribadi, yang disediakan oleh sistem operasi pada aktivasi perangkat awal dan disimpan di rantai kunci perangkat. Selama aktivasi, APN mengautentikasi dan memvalidasi koneksi ke perangkat, berdasarkan sertifikat dan kunci, seperti yang ditunjukkan pada Gambar 6-5.
Gambar 1-5 Membangun kepercayaan koneksi antara perangkat dan APN
Seperti yang ditunjukkan di Gambar 1-5, kepercayaan APN ke perangkat berfungsi sebagai berikut:
- Negosiasi kepercayaan dimulai saat perangkat memulai koneksi TLS dengan APN, seperti yang ditunjukkan di panah atas pada gambar.
- APN mengembalikan sertifikat APN ke perangkat.
- Sistem operasi memvalidasi sertifikat ini dan kemudian, seperti yang ditunjukkan pada panah "Sertifikat perangkat", mengirimkan sertifikat perangkat ke APN.
- Terakhir, seperti yang ditunjukkan oleh panah bawah pada gambar, APN memvalidasi sertifikat perangkat, membangun kepercayaan.
- Dengan koneksi TLS yang dibuat antara APN dan perangkat, aplikasi di perangkat dapat mendaftar dengan APN untuk menerima token perangkat khusus aplikasinya untuk notifikasi jarak jauh. Untuk detail dan contoh kode, lihat Mendaftar untuk Menerima Notifikasi Jarak Jauh dalam Mengonfigurasi Dukungan Notifikasi Jarak Jauh.
Setelah menerima token perangkat, aplikasi harus terhubung ke penyedia terkait aplikasi dan meneruskan token ke sana. Langkah ini diperlukan karena penyedia harus menyertakan token perangkat nanti ketika mengirimkan permintaan notifikasi, ke APN, yang menargetkan perangkat. Kode yang Anda tulis untuk meneruskan token juga ditampilkan di Mendaftar untuk Menerima Notifikasi Jarak Jauh.
Apakah pengguna mengaktifkan perangkat untuk pertama kali, atau apakah APN telah mengeluarkan token perangkat baru, prosesnya serupa dan ditunjukkan pada Gambar 6-6.
Gambar 1-6 Mengelola token perangkat
Mendapatkan dan menangani token perangkat khusus aplikasi berfungsi sebagai berikut:
Aplikasi Anda mendaftar dengan APN untuk notifikasi jarak jauh, seperti yang ditunjukkan di panah atas. Jika aplikasi sudah terdaftar dan token perangkat khusus aplikasi tidak berubah, sistem akan dengan cepat mengembalikan token yang ada ke aplikasi dan proses ini melompat ke langkah 4.
Saat token perangkat baru diperlukan, APN membuatnya menggunakan informasi yang terdapat dalam sertifikat perangkat. Ini mengenkripsi token menggunakan kunci token dan mengembalikannya ke perangkat, seperti yang ditunjukkan di tengah, panah menunjuk kanan.
Sistem mengirimkan token perangkat kembali ke aplikasi Anda dengan memanggil metode application: didRegisterForRemoteNotificationsWithDeviceToken: delegate.
Setelah menerima token, aplikasi Anda (dalam metode delegasi) harus meneruskannya ke penyedia Anda dalam format biner atau heksadesimal. Penyedia Anda tidak dapat mengirim pemberitahuan ke perangkat tanpa token ini. Untuk detailnya, lihat Mendaftar untuk Menerima Notifikasi Jarak Jauh dalam Mengonfigurasi Dukungan Notifikasi Jarak Jauh.
PENTING
Token perangkat APN memiliki panjang yang bervariasi. Jangan membuat kode keras ukurannya.
Saat penyedia Anda mengirimkan permintaan notifikasi push ke APN, itu menyertakan token perangkat yang mengidentifikasi kombinasi aplikasi-perangkat yang unik. Langkah ini ditunjukkan pada panah “Token, Payload” antara penyedia dan APN pada Gambar 6-7. APN mendekripsi token untuk memastikan validitas permintaan dan untuk menentukan perangkat target. Jika APN menentukan bahwa pengirim dan penerima sah, APN kemudian mengirimkan pemberitahuan ke perangkat yang diidentifikasi.
Gambar 1-7 Jalur notifikasi jarak jauh dari penyedia ke perangkat
Setelah perangkat menerima notifikasi (dan setelah langkah terakhir yang ditunjukkan pada Gambar 1-7), sistem meneruskan notifikasi jarak jauh ke aplikasi Anda.
Ref: Apple Push Notification Service
Sekarang, lihat di sini untuk memahami alur teknis: Bagaimana cara mengimplementasikan Layanan Pemberitahuan Push Apple pada Aplikasi iOS?