Setel ulang pengaturan pemberitahuan push untuk aplikasi

173

Saya mengembangkan aplikasi dengan pemberitahuan push. Untuk memeriksa semua kemungkinan cara interaksi pengguna, saya ingin menguji aplikasi saya ketika pengguna menolak untuk mengaktifkan notifikasi push untuk aplikasi saya selama awal pertama.

Dialog (diprakarsai oleh registerForRemoteNotificationTypes), bagaimanapun, hanya muncul sekali per aplikasi. Bagaimana cara mengatur ulang memori iPhone OS aplikasi saya. Menghapus aplikasi dan menginstal ulang tidak membantu.

hanno
sumber

Jawaban:

300

Catatan Teknis TN2265: Memecahkan Pemberitahuan Push

Pertama kali aplikasi yang diaktifkan tekan mendaftarkan pemberitahuan push, iOS bertanya kepada pengguna apakah mereka ingin menerima pemberitahuan untuk aplikasi itu. Setelah pengguna merespons peringatan ini, tidak akan ditampilkan lagi kecuali perangkat dipulihkan atau aplikasi telah dihapus instalasinya selama setidaknya satu hari.

Jika Anda ingin mensimulasikan menjalankan aplikasi Anda yang pertama kali, Anda dapat menghapus aplikasi selama satu hari. Anda dapat mencapai yang terakhir tanpa benar-benar menunggu sehari dengan mengatur jam sistem maju sehari atau lebih, mematikan perangkat sepenuhnya, lalu menyalakan kembali perangkat.

Pembaruan: Seperti disebutkan dalam komentar di bawah, solusi ini berhenti berfungsi sejak iOS 5.1. Saya akan mendorong pengarsipan bug dengan Apple sehingga mereka dapat memperbarui dokumentasinya. Solusi saat ini tampaknya mengatur ulang konten dan pengaturan perangkat.

Pembaruan: Catatan teknologi telah diperbarui dengan langkah-langkah baru yang berfungsi dengan benar pada iOS 7.

  1. Hapus aplikasi Anda dari perangkat.
  2. Matikan perangkat sepenuhnya dan hidupkan kembali.
  3. Buka Pengaturan> Umum> Tanggal & Waktu dan tetapkan tanggal di depan sehari atau lebih.
  4. Matikan perangkat sepenuhnya lagi dan hidupkan kembali.

UPDATE pada iOS 9

Cukup menghapus dan menginstal ulang aplikasi akan mengatur ulang status pemberitahuan ke notDetermined(artinya prompt akan muncul).

Berkat jawabannya oleh Gomfucius di bawah ini: https://stackoverflow.com/a/33247900/704803

ianolito
sumber
16
Adakah yang pernah mencoba w / iOS 5.1 ini? Saya telah mengikuti langkah-langkah ini dengan tepat dan saya masih tidak dapat mengatur ulang perangkat ... Saya bahkan telah mencoba mengatur jam pada Mac saya maju sebelum menginstalnya melalui Xcode.
nrj
1
Ditto ... Saya tidak mendapatkan prompt.
Rob
2
Apple menambahkan persyaratan baru pada pedoman pengiriman AppStore, yang bergantung pada aplikasi untuk menampilkan prompt. Ini mungkin menyarankan bahwa prompt otomatis telah dihapus di iOS 5.1. Namun tidak ada API untuk menanyakan pengaturan pusat notifikasi, jadi tidak yakin apa tujuan dari prompt itu. Lihat tanggapan saya untuk masalah yang sama: stackoverflow.com/questions/10191006/…
Greg
10
Ini konyol. Tidakkah Apple menyadari bahwa pengembang atau bahkan pengguna mungkin ingin dapat mereset hal-hal ini tanpa menggunakan solusi yang sangat buruk?
sudo
2
Ketika saya mencoba ini di simulator, saya mendapatkan kode kesalahan = 3010 "notifikasi jarak jauh tidak didukung dalam simulator"
Thomas Zimmer
48

Satu lagi solusi pengujian hanya untuk ini adalah dengan hanya mengubah bundel id Anda. Hanya saja, jangan lupa untuk mengubahnya kembali setelah Anda selesai!

capikaw
sumber
12
Bukankah Anda juga perlu membuat sertifikat untuk id aplikasi baru untuk mengujinya?
Tony
1
Ini hanya akan berfungsi jika Anda menggunakan profil penyediaan berbasis wildcard - jika tidak, Anda perlu membuat profil untuk bundel baru.
Zorayr
Bahkan jika Anda perlu membuat profil baru, itu hanya mengklik tombol "Perbaiki" dan menunggu beberapa detik - jauh lebih cepat daripada melalui semua siklus reboot.
Ilya
ini solusi tercepat! Ini bekerja cukup baik untuk saya! Saat mengubah bundle_id Anda, Anda tidak akan dapat masuk aplikasi dengan "profil penyediaan" yang sama. Tapi jangan khawatir, di xCode (versi saya 7.1.1), Anda dapat mengklik "perbaiki" dan itu berfungsi. Selain itu, jangan lupa onglet "Capabilities", di mana Anda dapat memiliki beberapa item untuk "diperbaiki" (dengan mengklik tombol "fix it") dan kemudian, itu akan bekerja dengan sangat baik!
Dam Fa
Jawaban ini adalah opsi yang sah tetapi masih merupakan perbaikan untuk situasi bodoh dari Apple. Saya tidak mengubah bundleID, atau mengganti jam perangkat. Sebagaimana layaknya, pengembang mana pun dapat menulis beberapa kode pendek yang menunjukkan UIAlertView yang menanyakan "Izinkan pemberitahuan push?" .. Ya = panggil metode registrasi; No = call didFailToRegisterForRemoteNotificationsWithError (dll) .. itu solusi saya sendiri, saya dibawa pulang setelah membaca T&J ini. Secara teknis, ini cara terbaik, untuk memberi pengguna informasi privasi ... MENGAPA push harus diaktifkan atau opsional.
Tom Pace
36

Di iOS 9.0.2, saya mendapatkan "register push notification alert" setiap kali saya menghapus aplikasi dan menginstalnya kembali. Ini berlaku untuk unduhan produksi AppStore dan mode adhoc.

PEMBARUAN: Dipastikan ini berfungsi untuk iOS 9.x

Genki
sumber
1
Saya mengalami perilaku yang sama untuk iOS 9.x. Saya akan merekomendasikan Anda untuk mengedit jawaban asli dengan menambahkan PEMBARUAN:
Yevhen Dubinin
3
Akhirnya! Tidak ada lagi menghapus aplikasi, mematikan perangkat, mengatur jam ke waktu maju dan beberapa hal konyol seperti ini.
mkeremkeskin
19

Seperti yang telah dicatat, pendekatan untuk mengatur ulang status pemberitahuan untuk aplikasi pada perangkat diubah untuk iOS5 yang lebih baru.

Ini berfungsi untuk saya di iOS6:

  • Hapus aplikasi dari perangkat
  • Tetapkan masa pakai perangkat dua hari ke depan
  • Mulai ulang perangkat
  • Tetapkan masa pakai perangkat dua hari ke depan
  • Mulai ulang perangkat
  • Instal dan jalankan aplikasi lagi

Namun ini hanya akan membuat prompt awal muncul lagi - itu tidak akan menghapus hal-hal terkait keadaan push lainnya.

micmdk
sumber
Bekerja untuk saya juga di ios7, Anda harus mengubah tanggal dua kali sekali tidak bekerja
Nath
1
Terima kasih! Ini bahkan berfungsi di iOS 8 (saya harus mengatur ulang izin push untuk Twitter.app, karena tidak memiliki pengaturan "Ikon ikon aplikasi" di panel preferensi di Pengaturan).
gklka
9

Plist: /private/var/mobile/Library/RemoteNotification/Clients.plist

... berisi klien terdaftar untuk pemberitahuan push. Menghapus entri aplikasi Anda akan menyebabkan prompt muncul kembali

Erik Johnson
sumber
11
jawaban tidak berguna jika Anda mengembangkan untuk App Store
samvermette
20
Jika ini mungkin untuk pelanggar jailbreak, seharusnya pengembang dapat melakukannya di ponsel yang tidak di-jailbreak, kan? Dan ini BUKAN jawaban yang tidak berguna, karena ini bukan sesuatu yang Anda masukkan ke dalam aplikasi untuk diserahkan ke toko. Ini untuk pengembang untuk melakukan SAAT PENGUJIAN.
Oscar
1
File ini bukan bagian dari iOS 5.x.
gmogames
Lihat jawaban yang diperbarui sebagai bagian dari pertanyaan ini: stackoverflow.com/questions/13021066/...
AriX
7

Melakukannya secara terprogram sepertinya bekerja untuk saya setiap saat. Saya memiliki build dengan baris berikut tanpa komentar:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Saya menjalankannya setiap kali saya ingin membatalkan pendaftaran dari PN. Anda mungkin harus mengakhiri aplikasi secara eksplisit dari daftar terbaru dan bermain-main dengan Pusat Pemberitahuan di aplikasi Pengaturan untuk memperbaikinya.

Juga, prompt UI yang meminta pengguna untuk mendaftar untuk PN mungkin tidak muncul. Tidak yakin apakah telah dinonaktifkan di salah satu versi iOS terbaru.

dagnytaggart
sumber
Bekerja untuk saya iOS 10 / iPhone 6S. Perhatikan bahwa saya tidak terdaftar, lalu menghapus aplikasi sebelum menginstal ulang.
Gabriel Jensen
5

Seperti yang dikatakan ianolito, pengaturan tanggal harus berfungsi:

Anda dapat mencapai yang terakhir tanpa benar-benar menunggu sehari dengan mengatur jam sistem maju sehari atau lebih, mematikan perangkat sepenuhnya, lalu menyalakan kembali perangkat.

Saya perhatikan pada perangkat saya (iPhone 4, iOS 6.1.2) pengaturan jam sistem sehari ke depan atau bahkan beberapa hari tidak bekerja untuk saya. Jadi saya menyetel tanggal ke depan satu bulan dan kemudian itu berhasil dan aplikasi saya menampilkan prompt pemberitahuan lagi.

Semoga ini bisa membantu bagi siapa saja, itu bisa membuat sakit kepala!

Vincent Cohen
sumber
1
Tolong jangan jawab dengan "OS Terbaru" - itu berubah sepanjang waktu. Perilaku ini tampaknya masih rusak di 6.1.2, tapi mungkin berhasil di 6.0.1?
patr1ck
Diedit jawabannya, masih ada di 6.1.2 ya dan sebelumnya di 6.0.1 juga. Ini hanya berfungsi untuk saya jika saya setidaknya menetapkan tanggal +1 bulan.
Vincent Cohen
1
Saya juga telah mendengar 24 jam, jadi mencobanya dan tidak berhasil selama 2 hari di muka. Atur agar suka 3 bulan dari sekarang dan popup izin muncul lagi! Terima kasih!
marcshilling
Posting lama tapi senang melihatnya masih membantu! Semoga berhasil :)
Vincent Cohen
5

Saya setuju dengan micmdk .. Saya memiliki pengaturan lingkungan pengembangan dengan Push Notification dan membutuhkan cara untuk mengatur ulang ponsel agar terlihat seperti instalasi awal ... dan hanya langkah-langkah tepat ini yang bekerja untuk saya ... memerlukan DUA reboot Perangkat:

Dari APPLE TECH DOC:

Menyetel Ulang Peringatan Notifikasi Izin Push di iOS Pertama kali aplikasi yang diaktifkan push mendaftarkan pemberitahuan push, iOS bertanya kepada pengguna apakah mereka ingin menerima pemberitahuan untuk aplikasi itu. Setelah pengguna merespons peringatan ini, tidak akan ditampilkan lagi kecuali perangkat dipulihkan atau aplikasi telah dihapus instalasinya selama setidaknya satu hari.

Jika Anda ingin mensimulasikan menjalankan aplikasi Anda yang pertama kali, Anda dapat menghapus aplikasi selama sehari. Anda dapat mencapai yang terakhir tanpa benar-benar menunggu sehari dengan mengikuti langkah-langkah ini:

  1. Hapus aplikasi Anda dari perangkat.

  2. Matikan perangkat sepenuhnya dan hidupkan kembali.

  3. Buka Pengaturan> Umum> Tanggal & Waktu dan tetapkan tanggal di depan sehari atau lebih.

  4. Matikan perangkat sepenuhnya lagi dan hidupkan kembali.

lepert
sumber
Ini telah disebutkan sebagai tidak lagi berfungsi dalam jawaban lain.
Beau Nouvelle
Ini bekerja dengan baik. Apa yang berhenti berfungsi di iOS 5.1 adalah versi lama dari jawaban lain itu, yang meninggalkan reboot antara menghapus aplikasi dan menyetel jam di depan.
dgatwood
3

Saya telah bertanya-tanya tentang ini di masa lalu dan sampai pada kesimpulan bahwa itu sebenarnya bukan kasus uji yang valid untuk kode saya. Saya tidak berpikir kode aplikasi Anda benar-benar dapat membedakan antara seseorang yang menolak notifikasi pertama kali atau yang lebih baru menonaktifkannya dari pengaturan notifikasi iPhone. Memang benar bahwa pengalaman pengguna berbeda tetapi yang tersembunyi di dalam panggilan untuk registerForRemoteNotificationTypes.

Memanggil unregisterForRemoteNotifications tidak sepenuhnya menghapus aplikasi dari pengaturan notifikasi - meskipun itu menghapus konten pengaturan untuk aplikasi itu. Jadi ini masih tidak akan menyebabkan dialog disajikan untuk kedua kalinya kepada pengguna saat aplikasi berikutnya dijalankan (setidaknya tidak pada v3.1.3 yang saat ini saya uji dengan). Tapi seperti yang saya katakan di atas, Anda mungkin tidak perlu khawatir tentang itu.

kharrison
sumber
Saya berharap untuk jawaban yang lebih baik, tetapi saya kira tidak ada jawaban. Bagaimanapun, terima kasih!
hanno
3

Catatan teknologi yang sama seperti yang disebutkan dalam jawaban yang diterima ( TN2265 - Mengatasi Pemberitahuan Push) telah diperbarui dengan solusi untuk iOS 5 dan di atasnya.

Singkatnya: buat cadangan dan pulihkan dari sana setiap waktu.

Pada iOS 5 dan yang lebih baru, setel ulang peringatan izin pemberitahuan push dengan mengembalikan perangkat dari cadangan (r. 11450187). Berikut langkah-langkah untuk melakukan ini secara efisien:

  1. Gunakan Xcode Organizer untuk menginstal aplikasi Anda di perangkat. Kuncinya adalah menginstal aplikasi untuk pertama kalinya tanpa menjalankannya.
  2. Gunakan iTunes untuk mencadangkan perangkat.
  3. Jalankan aplikasi. Peringatan izin pemberitahuan push akan ditampilkan.
  4. Saat Anda ingin mengatur ulang peringatan izin pemberitahuan push, pulihkan perangkat dari cadangan yang Anda buat di langkah pertama.
David Rönnqvist
sumber
Mungkin merekomendasikan itu pada satu waktu, tetapi tidak lagi melakukannya. Rekomendasi saat ini adalah untuk menghapus aplikasi, reboot, atur jam ke depan, reboot, secara opsional atur jam kembali ke tanggal dan waktu yang benar, dan jalankan aplikasi.
dgatwood
2

Apple Tech Note juga menjelaskan Anda dapat memulihkan perangkat untuk mengatur ulang dialog Pemberitahuan Push.

Tidak dikatakan bahwa Anda juga dapat menggunakan opsi "Umum -> Atur Ulang -> Hapus Semua Konten Dan Pengaturan" pada perangkat itu sendiri (iOS 5.x).

Tuan Zystem
sumber
1
Untuk apa nilainya: Saya hanya mencoba 'hapus semua pengaturan', dan itu tidak berhasil. Mencoba semua-konten-dan-semua-pengaturan ...
Groxx
8
Dan "semua konten dan pengaturan" memang berfungsi, terima kasih! Tapi opsi nuklir suci, Batman! Benar-benar gila.
Groxx
94
Saya pernah mendengar membeli perangkat baru juga menghapus peringatan pemberitahuan push!
samvermette
Saya mencoba membeli perangkat baru, tetapi itu tidak berhasil. Setelah membawa perangkat baru ke bar jenius, mereka melakukan beberapa keajaiban dan memperbaiki lebih banyak uang ... Saya terkejut setelah bertahun-tahun Apple masih belum menyediakan cara praktis dan sederhana untuk mengatur ulang izin push. Ini konyol
Chris
1

Selain jawaban dari ianolito.

Punya masalah yang sama dengan aplikasi yang saya unduh setahun yang lalu dan menolak pemberitahuan push pada awalnya. Sekarang ingin pemberitahuan push kembali, langkah-langkah ini bekerja untuk saya di iOS 7 beta. Tidak yakin titik mana yang memicu persisnya.

  • Tutup dan hapus aplikasi.
  • Buka pengaturan iCloud Anda dan hapus aplikasi dari iCloud. Lakukan ini di semua perangkat lain di mana Anda memiliki cadangan iCloud untuk aplikasi yang diaktifkan. Setelah menonaktifkan dan menghapus, buat cadangan baru. Aplikasi seharusnya tidak terdaftar lagi di bawah cadangan. (Ini mungkin mengapa Catatan Teknis dari Apple yang dijelaskan oleh ianolito berhenti bekerja di iOS 5, karena iCloud diperkenalkan di iOS 5 dan banyak yang memiliki cadangan iCloud untuk aplikasi yang diaktifkan.)
  • Buka pengaturan waktu Anda dan atur waktu lebih dari 1 bulan ke depan.
  • Matikan iPhone (tidak diatur ulang).
  • Tunggu sebentar, nyalakan lagi dan unduh aplikasi lagi.
  • Mulai aplikasi dan saya disajikan dialog lagi.
  • Aktifkan cadangan aplikasi lagi, karena masih dinonaktifkan. Perbaiki waktu.

Terima kasih Tuhan saya tidak perlu "Hapus Semua Konten Dan Pengaturan". Mungkin itu akan membantu seseorang.

Masa
sumber
1

Saya baru-baru ini mengalami masalah yang sama dengan aplikasi reaksi-asli. Versi iPhone OS 13.1. Saya mencopot aplikasi dan mencoba menginstal aplikasi dan memperhatikan bahwa izin lokasi dan notifikasi tidak diminta.

Saat memeriksa pengaturan, saya bisa melihat aplikasi saya diaktifkan untuk lokasi (dari instalasi sebelumnya) namun tidak ada entri yang sesuai dengan pemberitahuan. Mencoba mencopot pemasangan dan mem-boot ulang tanpa mengatur waktu, itu tidak berfungsi. Btw, saya juga mencoba mengunduh aplikasi Appstore, perilaku masih sama.

Masalah ini diselesaikan hanya setelah mengatur waktu perangkat.

RUppal
sumber
0

Setelah berjam-jam mencari, dan tidak berhasil dengan saran di atas, ini berfungsi seperti pesona untuk 3.x +

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }
Felecia Genet
sumber