Bagaimana cara kerja Notifikasi Push iOS?

98

Bagaimana notifikasi "push" iOS dikirimkan ke perangkat tertentu tanpa perangkat tersebut perlu melakukan polling ke server?

Misalnya, saya menerima pesan baru di Facebook. Facebook memberi tahu Apple bahwa perangkat saya harus menerima pemberitahuan seperti itu. Tetapi bagaimana Apple mengetahui perangkat / IP mana yang akan mengirim pesan?

Andy Hin
sumber
2
@Wain Saya mencari penjelasan rinci di tingkat teknis. Artikel itu levelnya sangat tinggi. Jadi perangkat saya mempertahankan koneksi terbuka dengan server push Apple setiap saat?
Andy Hin
Saya lebih akrab dengan push android, tetapi biasanya, ketika Anda menginstal aplikasi itu mendaftarkan perangkat dengan ID unik dengan Apple. Kemudian ketika facebook mengirim pesan ke apple, apple akan meneruskannya ke ID unik perangkat.
Panama Jack
6
@Pjack ya, tetapi dengan perangkat saya yang terus-menerus mengubah menara seluler yang berbeda, jaringan wifi yang berbeda, bagaimana Apple mengetahui IP untuk ID unik saya?
Andy Hin
@whydna Terima kasih telah menanyakan pertanyaan ini. Saya ingin memahami hal yang persis sama. Saya percaya ini menjawab pertanyaan saya di sini: stackoverflow.com/questions/18859732/…
MightyMouse
@AndyHin OS perangkat (iOS) mengetahui server APN mana yang valid. Perangkat terhubung ke server ini dan menjaga koneksi tetap terbuka. Koneksi ini kemungkinan terkait dengan id perangkat dan meta-data lainnya (nomor telepon). Ketika sebuah pesan perlu "didorong", APN menemukan koneksi yang tepat dan mengirimkannya ke koneksi yang sudah terbuka itu. Jadi APN tidak mencoba membuat koneksi ke perangkat, selalu perangkat yang membuka koneksi itu. Satu koneksi per perangkat.
Todd

Jawaban:

49

Terlalu berlebihan bagiku untuk berkomentar.

Dari dokumentasi.

Layanan Pemberitahuan Push Apple (APN) menyebarkan pemberitahuan push ke perangkat yang memiliki aplikasi terdaftar untuk menerima pemberitahuan tersebut. Setiap perangkat membuat koneksi IP terakreditasi dan terenkripsi dengan layanan dan menerima pemberitahuan melalui koneksi persisten ini. Penyedia terhubung dengan APN melalui saluran persisten dan aman sambil memantau data yang masuk yang ditujukan untuk aplikasi klien mereka. Saat data baru untuk aplikasi tiba, penyedia menyiapkan dan mengirimkan notifikasi melalui saluran ke APN, yang mendorong notifikasi ke perangkat target ..

Saya sarankan membaca dokumentasi untuk informasi lebih lanjut dan cara menggunakan dan mengkonfigurasi. Semuanya ada di sana.

Pemberitahuan Push

Panama Jack
sumber
Terima kasih atas jawabannya.
MightyMouse
7
Jadi Apple mempertahankan IP statis ke perangkat Anda?
CMCDragonkai
Saya bertanya-tanya ketika mengerti bahwa server saya harus mengirimkan pemberitahuan ke APNS UNTUK SETIAP PERANGKAT TARGET! :(
Vladimir
4
@CMCDragonkai Perangkat membuat koneksi, bukan server.
Hitechcomputergeek
7
jadi perangkat mempertahankan jenis koneksi polling / soket yang panjang selalu dengan layanan APN? Jika demikian, bagaimana layanan APN menangani begitu banyak koneksi - Jika server dapat menampung 50k koneksi dan selalu ada 500 juta pengguna, layanan setidaknya membutuhkan 10.000 server yang benar. Apakah ini skenario praktis?
AV94
87

Setiap perangkat dapat diperbarui dengan data menggunakan token perangkat unik mereka sendiri. Gambar ini menjelaskan segalanya. .

masukkan deskripsi gambar di sini

Karan Alangat
sumber
Tahu apa gunanya Token Perangkat? Apakah ini digunakan untuk mengenkripsi komunikasi antara server APNS dan Aplikasi atau di tempat lain?
Mugen
1
@Mugen: Token perangkat digunakan oleh APNS untuk mengidentifikasi perangkat mana yang seharusnya meneruskan muatan yang dikirim oleh penyedia!
D4ttatraya
@Karan - Apakah ada perbedaan antara notifikasi untuk pengguna (mis., "Hai pengguna, Anda memiliki pesan!") Dan notifikasi yang dimaksudkan untuk mengaktifkan aplikasi dan secara diam-diam menyuruhnya melakukan pemrosesan latar belakang?
Howiecamp
@Howiecamp Jika Anda menggunakan pemberitahuan push, Anda akan mendapat pemberitahuan setiap kali pemberitahuan telah diterima jika aplikasi sedang berjalan. Detail notifikasi aktif juga dapat diakses, saat pengguna mengetuk notifikasi dari pusat notifikasi dan meluncurkan aplikasi. Selama ini Anda dapat melakukan proses yang ingin Anda lakukan.
Karan Alangat
@KaranAlangat, Bagaimana Badge Count ditangani disini? Bagaimana server tahu tentang itu?
GvSharma
22

Saya membuat infografis untuk menjelaskan alur kerja notifikasi push. Semoga bermanfaat.

masukkan deskripsi gambar di sini

Udit Agarwal
sumber
22

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

gambar: ../Art/remote_notif_simple.jpg

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

gambar: ../Art/remote_notif_multiple.jpg

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

image: ../Art/service_provider_ct.jpg

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

gambar: ../Art/service_provider_ct_certificate_2x.png

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

image: ../Art/service_device_ct.jpg

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

image: ../Art/token_generation.jpg

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

gambar: ../Art/token_trust.jpg

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?

Krunal
sumber
7
Haha, Anda benar-benar baru saja menempelkan seluruh entri Apple Docs ke SO!
Matt Mc
@MattMc - Ya, saya adalah pemula untuk SO, ketika saya memposting jawaban ini dan pada saat itu saya memposting tautan ke APNS tetapi tautan tersebut tidak dianggap sebagai jawaban di SO, jadi saya melakukan ini .... :)
Krunal
1
Itu benar sebenarnya, jauh lebih baik daripada jawaban hanya-link;)
Matt Mc
14

Perangkat tidak terus melakukan polling server untuk notifikasi push.

Untuk membuatnya tetap sederhana, pertimbangkan iPhone terhubung ke internet. Saat menghubungkan ke internet, iPhone membuat koneksi ke server Pemberitahuan Push Apple, koneksi ini adalah koneksi terbuka yang berarti data dapat dibuang ke iPhone dari server saat data tiba ke server.

Apple tidak menggunakan protokol HTTP untuk pemberitahuan Push tetapi jika Anda memahami Protokol HTTP, metodologi yang hampir serupa.

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push

pengguna4248688
sumber
Apa yang mereka gunakan jika bukan http?
Howiecamp
2

Ada eksaplanasi pemberitahuan push yang sangat bagus di artikel ini .

Di iOS, aplikasi tidak dapat melakukan banyak hal di latar belakang. Aplikasi hanya diizinkan untuk melakukan serangkaian aktivitas terbatas sehingga masa pakai baterai dihemat.

Tetapi bagaimana jika sesuatu yang menarik terjadi dan Anda ingin memberi tahu pengguna tentang hal ini, meskipun mereka sedang tidak menggunakan aplikasi Anda?

Tarek
sumber