Jawaban:
Dari [Dokumentasi Apple ApplePushService] 2
Bentuk fase kepercayaan token ini memastikan bahwa hanya APN yang menghasilkan token yang nantinya akan dihormati, dan dapat memastikan dirinya sendiri bahwa token yang diserahkan kepadanya oleh perangkat adalah token yang sama dengan yang sebelumnya disediakan untuk perangkat tertentu itu — dan hanya untuk perangkat itu.
Jika pengguna memulihkan data cadangan ke perangkat baru atau menginstal ulang sistem operasi, token perangkat berubah.
Dokumentasi resmi Apple tidak jelas mengenai hal ini. Apa yang saya amati adalah ini: token tidak berubah untuk perangkat, aplikasi, dan domain tertentu (produksi vs. kotak pasir). Saya percaya bahwa ini harus tetap benar agar sistem dapat bekerja dengan andal. Pertimbangkan situasi di mana pembaruan aplikasi memicu token APN baru; jika saya menggunakan aplikasi baru seperti Twitter, dengan pemberitahuan diaktifkan, apa yang akan terjadi ketika saya memperbarui aplikasi saya dari iTunes? Haruskah saya berharap bahwa itu akan terus dikirim pemberitahuan meskipun saya belum menjalankan aplikasi sejak saya "menyinkronkan" pembaruan ke perangkat saya? Tindakan mengubah aplikasi tidak dapat memengaruhi sistem APN karena OS dapat menerima pemberitahuan atas nama Anda meskipun Anda belum menjalankan aplikasi yang diperbarui.
Untuk memperjelas, Apple menyatakan "Sebuah aplikasi harus mendaftar [dengan server APN] setiap kali diluncurkan dan memberikan token saat ini kepada penyedia". Saya setuju sepenuh hati; melakukannya akan melindungi aplikasi Anda dari asumsi buruk atau situasi yang tidak biasa.
Salah satu jawaban untuk Apakah token notifikasi push unik di semua aplikasi untuk satu perangkat? menunjukkan bahwa token perangkat unik per "pemasangan sistem operasi"; dan bahwa memulihkan dari cadangan ke perangkat akan mempertahankan token, tetapi menghapus perangkat akan menyebabkan token baru didapat. Ini akan sepenuhnya konsisten dengan niat Apple untuk operasi dan privasi yang mulus: menghapus perangkat cukup parah sehingga mungkin memerlukan asosiasi baru, tetapi pengguna yang memulihkan gambar setelah pembaruan OS ingin mempertahankan pemberitahuan yang ada. Jika saya mengingat pembaruan iOS5 baru-baru ini di iPad saya, saya memulihkan cadangan terbaru setelah meningkatkan, jadi ini akan menjaga konsistensi token pemberitahuan saya. [Edit: memulihkan cadangan ke yang berbeda perangkat TIDAK akan menduplikasi token.]
peringatan: Saya tidak memiliki pengetahuan yang pasti tentang subjek tersebut, hanya beberapa pengalaman yang masuk akal bekerja dengan APN (sebagai pengembang pihak ketiga). Seperti biasa, yang terbaik adalah memverifikasi asumsi Anda.
Baru-baru ini saya memiliki kesempatan untuk> berbicara dengan teknisi Apple dan b> menjalankan beberapa tes dunia nyata, dan saya ingin mempresentasikan hasilnya:
Untuk lengkapnya, ketika saya berbicara tentang mengembalikan token APN, saya mengasumsikan konteks pengenal / aplikasi bundel tunggal.
Pertama, insinyur Apple mengatakan bahwa tidak mungkin dua perangkat mengembalikan APN yang sama. Terlepas dari komentar di bawah, saya belum dapat mengidentifikasi keadaan di mana ini gagal.
Kedua, berikut urutan dan hasil tes peningkatan:
Mulailah dengan iOS4 yang diinstal pada iPhone4; perangkat cadangan di iTunes
Tingkatkan ke iOS5
Dari pengujian sebelumnya, saya tahu bahwa token APN sekarang berbeda
Pulihkan cadangan ke perangkat
Token APN sekarang sama dengan langkah 1.
Atur ulang iOS (perangkat bersih)
Token APN berubah
Cadangkan ponsel yang berbeda ke iTunes dan pulihkan cadangan itu ke perangkat uji; pada dasarnya, saya memulihkan cadangan yang "salah", seolah-olah saya berpindah ponsel.
Token APN berubah lagi; lebih jauh itu berbeda dan tidak cocok dengan token baik token asli atau token "kloning".
Pulihkan cadangan yang "benar" ke perangkat.
Token APN sekarang sama dengan langkah 1.
Terakhir, saya memutakhirkan ponsel ke iOS6 (beta2), memulihkan cadangan saya, dan menguji ulang. Seperti yang diharapkan, token terus mencocokkan token pada langkah 1.
Pada titik ini, saya cukup yakin bahwa token APN tidak dapat diduplikasi di antara perangkat yang berbeda; mungkin ini mungkin terjadi sebagai bug di versi iOS sebelumnya, tetapi saya yakin bahwa iOS5 (dan mungkin iOS6) menangani token APN dengan benar.
Saya baru menyadari bahwa saya belum menambahkan ini: token perangkat akan berubah. Salah satu pengembang Apple berbagi dengan saya bahwa token benar-benar kedaluwarsa (setelah 2 tahun, menurut saya). Untuk banyak tujuan, ini cukup lama sehingga bisa dianggap tidak berubah.
[Saya tidak khawatir jika saya harus memperbarui skrip pengujian saya dengan token baru setiap dua tahun, terutama karena saya berganti ponsel setiap tahun.]
Saya baru saja mengujinya dengan iOS9 dan perubahan token APN Push jika saya menginstal ulang aplikasi.
YA , token perangkat dapat berubah.
Setiap kali aplikasi Anda menerima token, itu harus menyimpannya. Kemudian, setiap kali token baru diterima (yang pada akhirnya akan terjadi), bandingkan token baru dengan token yang disimpan dan, jika berbeda:
nil
)Secara praktis, langkah terakhir adalah yang paling mungkin tidak sepele. Misalnya, jika Anda memiliki layanan yang mengirimkan peringatan cuaca ke token perangkat berdasarkan kode pos langganan perangkat tersebut, Anda harus meneruskan layanan tersebut old_token
dan new_token
ke sehingga dapat memperbarui pengiriman.
Ergo, secara umum 100% API yang menerima "token perangkat" juga harus memiliki beberapa jenis UPDATE
fasilitas untuk token itu. Untuk tidak membangun untuk ini adalah untuk membangun untuk pemberitahuan mis-disampaikan dan non-disampaikan.
Token perangkat berubah dari iOS 8 dan yang lebih baru
Silakan lihat teks di bawah ini dari situs web Apple. Mendaftarkan, Menjadwalkan, dan Menangani Pemberitahuan Pengguna
Token perangkat adalah kunci Anda untuk mengirimkan pemberitahuan push ke aplikasi Anda pada perangkat tertentu. Token perangkat dapat berubah, jadi aplikasi Anda perlu mendaftar ulang setiap kali diluncurkan dan meneruskan token yang diterima kembali ke server Anda. Jika Anda gagal memperbarui token perangkat, notifikasi jarak jauh mungkin tidak sampai ke perangkat pengguna. Token perangkat selalu berubah saat pengguna memulihkan data cadangan ke perangkat atau komputer baru atau menginstal ulang sistem operasi. Saat memigrasi data ke perangkat atau komputer baru, pengguna harus meluncurkan aplikasi Anda satu kali sebelum notifikasi jarak jauh dapat dikirimkan ke perangkat itu.
Saya pikir perlu disebutkan karena tidak ada yang melakukannya bahwa token berubah setelah Anda menelepon unregisterForRemoteNotifications
. Saat Anda menelepon registerForRemoteNotifications
lain kali, tokennya berbeda. Saya gagal menemukan konfirmasi apa pun tentang ini di dokumen Apple tetapi saya menyaksikan sendiri perilaku seperti itu. Harap diingat ini
Seharusnya tidak berubah, kecuali aplikasi Anda dipulihkan ke perangkat baru (pada saat itu ia tidak akan diminta untuk menerima pemberitahuan push lagi, dan hanya akan mengirimi Anda panggilan terdaftar di mana Anda harus menerima token baru).
Tetapi Apple tidak menjamin bahwa itu tidak pernah berubah (karena itu dokumentasi tidak pernah menyebutkannya). Anda lebih baik memprogram untuk yang terburuk dan menganggapnya mungkin berubah suatu hari. Selain itu, mengirim token ke server Anda secara teratur memungkinkan Anda untuk menghapus token yang tidak terdaftar untuk sementara waktu, dan mungkin telah menghapus instalasi aplikasi Anda atau kehilangan minat beberapa waktu yang lalu (dan dokumentasi menentukan ini sebagai perilaku yang diinginkan!).
Dari - Apple Docs
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.
Selain itu:
PENTING
Token perangkat APN memiliki panjang yang bervariasi. Jangan membuat kode keras ukurannya.
Tautan dengan cepat menjadi usang dengan apel! jadi saya mengutip apa yang tampaknya cukup jelas sekarang:
Jangan pernah menyimpan token perangkat di aplikasi Anda; sebagai gantinya, dapatkan dari sistem saat Anda membutuhkannya. APN mengeluarkan token perangkat baru ke aplikasi Anda saat peristiwa tertentu terjadi. Token perangkat dijamin berbeda, misalnya, saat pengguna memulihkan perangkat dari cadangan, saat pengguna memasang aplikasi Anda di perangkat baru, dan saat pengguna memasang ulang sistem operasi. Mengambil token, daripada mengandalkan cache, memastikan bahwa Anda memiliki token perangkat saat ini yang diperlukan penyedia Anda untuk berkomunikasi dengan APN. Saat Anda mencoba mengambil token perangkat tetapi tidak berubah, metode pengambilan kembali dengan cepat.
Sebagai referensi untuk hal-hal pemberitahuan push Apple
Token perangkat adalah kunci Anda untuk mengirimkan pemberitahuan push ke aplikasi Anda pada perangkat tertentu. Token perangkat dapat berubah, jadi aplikasi Anda perlu mendaftar ulang setiap kali diluncurkan dan meneruskan token yang diterima kembali ke server Anda. Jika Anda gagal memperbarui token perangkat, notifikasi jarak jauh mungkin tidak sampai ke perangkat pengguna. Token perangkat selalu berubah saat pengguna memulihkan data cadangan ke perangkat atau komputer baru atau menginstal ulang sistem operasi. Saat memigrasi data ke perangkat atau komputer baru, pengguna harus meluncurkan aplikasi Anda satu kali sebelum notifikasi jarak jauh dapat dikirimkan ke perangkat itu.
Jangan pernah menyimpan token perangkat; selalu dapatkan token dari sistem kapan pun Anda membutuhkannya. Jika aplikasi Anda sebelumnya terdaftar untuk notifikasi jarak jauh, memanggil metode registerForRemoteNotifications lagi tidak akan menimbulkan biaya tambahan, dan iOS mengembalikan token perangkat yang ada ke delegasi aplikasi Anda segera. Selain itu, iOS memanggil metode delegasi Anda setiap kali token perangkat berubah, tidak hanya sebagai respons terhadap pendaftaran atau pendaftaran ulang aplikasi Anda.
Menurut tautan ini token perangkat
Token perangkat yang disertakan dalam setiap permintaan mewakili identitas perangkat yang menerima notifikasi. APN menggunakan token perangkat untuk mengidentifikasi setiap aplikasi unik dan kombinasi perangkat. Itu juga menggunakannya untuk mengautentikasi perutean notifikasi jarak jauh yang dikirim ke perangkat. Setiap kali aplikasi Anda berjalan di suatu perangkat, ia mengambil token ini dari APN dan meneruskannya ke penyedia Anda. Penyedia Anda menyimpan token dan menggunakannya saat mengirim pemberitahuan ke aplikasi dan perangkat tersebut. Token itu sendiri tidak tembus cahaya dan tetap, hanya berubah jika data dan setelan perangkat dihapus. Hanya APN yang dapat mendekode dan membaca token perangkat.
Ya itu bisa berubah. Idealnya kapan pun kita menerima token melalui metode callback
- (void) application: (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken
Aplikasi harus mendaftarkan / menyegarkan token di server jarak jauh. Ini akan memastikan bahwa token di APNS dan server Anda tetap sinkron.
Sesuai dokumentasi Apple ,
Mendapatkan dan menangani token perangkat khusus aplikasi berfungsi sebagai berikut:
Aplikasi Anda mendaftar dengan APN untuk notifikasi jarak jauh Saat token perangkat baru diperlukan, APN membuat token 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.
Relai token perangkat pada penginstalan aplikasi.
Artinya jika Anda menginstal ulang aplikasi, itu berubah ; tidak masalah jika Anda melakukannya dari cadangan, peningkatan iOS ecc ..
Cara yang tepat untuk menggunakannya, untuk menghindari masalah apa pun, adalah mendapatkan yang diberikan pada NSPAppDelegate
setiap peluncuran aplikasi, dalam metodedidRegisterForRemoteNotificationsWithDeviceToken