Apakah token perangkat APNS pernah berubah, setelah dibuat?

99

Setelah dibuat, apakah token perangkat notifikasi push pernah berubah?

Contoh ketika aplikasi diperbarui? atau dalam hal lain bisa berubah ??

001
sumber
Pastikan Anda melihat jawaban ini karena memberikan dokumentasi ke 4 tempat di mana token perangkat berubah
Honey

Jawaban:

71

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.

Malinois
sumber
Dokumen saat ini telah menghapus kalimat terakhir. Tampaknya (dari pertanyaan SO lain, stackoverflow.com/questions/2751481/… ) bahwa memulihkan data akan mempertahankan token APN tetapi penginstalan OS dan "penghapusan" akan mengatur ulang (kecuali diikuti dengan memulihkan data ke operasi yang baru diinstal sistem).
Robert Altman
1
@RobertAltman - Saya rasa ini bukan keseluruhan cerita. Saya telah melihat sejumlah registrasi di database kami dari perangkat yang sangat berbeda dengan token APNS yang sama persis . Saya melihat di depan saya sekarang sebuah iPad 2, dan iPhone 3GS yang telah mengirimkan token yang sama kepada kami. Adakah orang lain yang dapat memastikan perilaku ini?
DougW
@DougW, ini aneh. Apakah Anda masih memiliki masalah serupa? Mengedit tautan dan memposting dari dokumen terbaru.
iosCurator
139

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.


Pembaruan (Juni 2012):

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:

  1. Mulailah dengan iOS4 yang diinstal pada iPhone4; perangkat cadangan di iTunes

  2. Tingkatkan ke iOS5
    Dari pengujian sebelumnya, saya tahu bahwa token APN sekarang berbeda

  3. Pulihkan cadangan ke perangkat
    Token APN sekarang sama dengan langkah 1.

  4. Atur ulang iOS (perangkat bersih)
    Token APN berubah

  5. 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".

  6. Pulihkan cadangan yang "benar" ke perangkat.
    Token APN sekarang sama dengan langkah 1.

  7. 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.


Pembaruan (Agustus 2012)

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.]

Robert Altman
sumber
jadi apakah ini berarti Anda dapat menggunakan token sebagai cara untuk mengidentifikasi pengguna secara unik? (yang sangat praktis dalam aplikasi yang mengharuskan seseorang untuk 'memilih'?). Saya bisa membayangkan situasinya: Suara pengguna, dan aplikasi merespons dengan nomor acak melalui notifikasi. Nomor itu harus dikirim ulang ke server agar pemungutan suara valid. Dengan cara ini pemungutan suara tidak bisa dicurangi dengan mudah.
Kodok
juga menarik: apakah token berubah saat menghapus aplikasi, dan menginstalnya kembali. Atau ini mirip dengan opsi 'memulihkan cadangan'
Toad
@Toad Token tidak akan berubah sebagai hasil dari penghapusan dan penginstalan ulang aplikasi.
Robert Altman
@ Muat Saya tidak akan berpikir bahwa ini akan menjadi bentuk identifikasi pengguna yang baik; karena token unik per perangkat (serta per aplikasi), pengguna dengan banyak perangkat akan memiliki banyak token.
Robert Altman
1
Saya ingin tahu tentang hubungan antara sertifikat dan token perangkat. jika sertifikat .p12 kedaluwarsa, maka sertifikat baru perlu diubah. Saya menemukan referensi "Saat token perangkat baru diperlukan, APN membuatnya menggunakan informasi yang terdapat dalam sertifikat perangkat." Jadi, bukankah kemungkinan token perangkat disegarkan saat mengubah sertifikat?
illusionJJ
50

Saya baru saja mengujinya dengan iOS9 dan perubahan token APN Push jika saya menginstal ulang aplikasi.

Nikolay Derkach
sumber
7
saya dapat mengonfirmasi ini
roocell
1
Saya bisa mengkonfirmasi ini juga
Muhammad Adnan
1
Ya, ini berubah :(
Azik Abdullah
Adakah yang bisa tahu mengapa ini terjadi?
Sushobhit
Ya, itu akan berubah
Ved Rauniyar
22

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:

  1. Perbarui penyimpanan lokal perangkat, (termasuk mungkin nil)
  2. Perbarui apa pun di perangkat yang menggunakan token untuk mengetahui token baru
  3. Perbarui API apa pun yang mengetahui token ini ke token baru.

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_tokendan new_tokenke sehingga dapat memperbarui pengiriman.

Ergo, secara umum 100% API yang menerima "token perangkat" juga harus memiliki beberapa jenis UPDATEfasilitas untuk token itu. Untuk tidak membangun untuk ini adalah untuk membangun untuk pemberitahuan mis-disampaikan dan non-disampaikan.

SG1
sumber
terdengar bagus, tapi apa yang telah saya hapus dan instal ulang aplikasi saya? dalam skenario itu token perangkat yang saya simpan di bawah penyimpanan lokal akan dihapus
Kuf
@Kuf, apakah Anda mendapatkan jawaban untuk pertanyaan itu? Saya memiliki hal yang sama - bahkan jika aplikasi dicopot / dipasang ulang, bagaimana kita akan membandingkan token sistem?
nkirkes
@nkirkes lihat pertanyaan ini untuk lebih jelasnya
Kuf
Tiga poin "Pembaruan" yang Anda bicarakan, apakah itu tanggung jawab iOS, SDK, atau diri kami sendiri?
julukan
7

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.

Nitya
sumber
2
URL sudah mati! Tolong perbaiki.
Ramis
tautan bagus
SomeGuyFortune
4

Saya pikir perlu disebutkan karena tidak ada yang melakukannya bahwa token berubah setelah Anda menelepon unregisterForRemoteNotifications. Saat Anda menelepon registerForRemoteNotificationslain kali, tokennya berbeda. Saya gagal menemukan konfirmasi apa pun tentang ini di dokumen Apple tetapi saya menyaksikan sendiri perilaku seperti itu. Harap diingat ini

Andrey Chernukha
sumber
3

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!).

Jake
sumber
Anda benar: Anda tidak dapat menganggap token itu permanen; ikuti aturan keterlibatan sebagaimana ditentukan dalam dokumen APN. Faktanya, pengembang Apple telah memberi tahu saya bahwa token pada akhirnya akan berubah (setelah sekitar 2 tahun).
Robert Altman
1
Menghidupkan kembali diskusi lama, tetapi seseorang mungkin menganggapnya berguna: Saya telah menghabiskan beberapa waktu minggu ini mengerjakan server Parse yang dihosting sendiri, dan mengalami masalah pengujian - ternyata setiap kali saya menyegarkan aplikasi dev saya (saat saya membuat jumlah UX berubah juga), id token berubah dengan setiap penginstalan perangkat lunak ... jadi bukankah itu terlalu menyenangkan? (menghela napas)
ChrisH
3

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.

Lal Krishna
sumber
2

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.

Dari panduan ini

TheFuquan
sumber
0

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.

Mohit Gaur
sumber
0

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.

lucianoenrico.dll
sumber
0

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.

iosCurator
sumber
0

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 NSPAppDelegatesetiap peluncuran aplikasi, dalam metodedidRegisterForRemoteNotificationsWithDeviceToken

Alberto Scampini
sumber