Сбросить настройки push-уведомлений для приложения
Я разрабатываю приложение с push-уведомлениями. Чтобы проверить все возможные способы взаимодействия с пользователем, я хотел бы протестировать свое приложение, когда пользователь отказывается включить push-уведомления для моего приложения во время первого запуска.
диалог (инициируется registerForRemoteNotificationTypes), однако, появляется только один раз в приложении. Как сбросить память ОС iPhone моего приложения. Удаление приложения и переустановка не помогает.
13 ответов:
техническое Примечание TN2265: Устранение неполадок Push-уведомлений
первый раз толчок с поддержкой приложения регистры push-уведомлений для iOS спрашивает пользователя, если они хотят получить уведомления для этого приложения. Когда-то пользователь ответил на это предупреждение это не представлено снова, если устройство восстанавливается или приложение было деинсталлируется как минимум на сутки.
Если вы хотите смоделировать первый раз запустите свое приложение, вы можете оставьте приложение удален на сутки. вы можете добиться последний без ожидания день, установив системные часы вперед на день или больше, поворачивая устройство полностью выключается, затем поворачивается устройство.
обновление: как отмечено в комментариях ниже, это решение перестало работать с iOS 5.1. Я бы рекомендовал подать ошибку в Apple, чтобы они могли обновить свою документацию. Текущее решение, похоже, сбрасывается содержимое и настройки устройства.
обновление: техническая заметка была обновлена с новыми шагами, которые работают правильно с iOS 7.
- удалить приложение с устройства.
- полностью выключите устройство и снова включите его.
- перейдите в Настройки > Общие > дата и время и установите дату вперед на день или более.
- выключите устройство и снова включите его снова.
обновление с iOS 9
простое удаление и переустановка приложения приведет к сбросу статуса уведомления до
notDetermined(появится подсказка значения).благодаря ответу Гомфуциуса ниже: https://stackoverflow.com/a/33247900/704803
другое просто для тестирования решение этой проблемы заключается в простом изменении идентификатора пакета. Только не забудьте изменить его обратно, как только вы сделали!
на iOS 9.0.2, я получаю "Регистрация push notification alert" каждый раз, когда я удаляю приложение и переустановить его. Это верно как для загрузки продукции AppStore, так и для режима adhoc.
обновление: подтверждено, что это работает для iOS 9.x
Как уже отмечалось, подход для сброса состояния уведомления для приложения на устройстве изменяется на iOS5 более новый.
Это работает для меня на iOS6:
- удалить приложение с устройства
- установите устройство datetime на два дня или более вперед
- перезагрузка устройства
- установите устройство datetime на два дня или более вперед
- перезагрузка устройства
- установить и запустить приложение опять
однако это только заставит начальное приглашение появиться снова-он не будет удалять любые другие вещи, связанные с состоянием push.
plist: / private/var/mobile/Library/RemoteNotification / Clients.файл plist
... содержит зарегистрированные клиенты для push-уведомлений. Удаление записи вашего приложения приведет к повторному появлению приглашения
делать это программно, кажется, работает для меня каждый раз. У меня есть сборка со следующей строкой uncommented:
[[UIApplication sharedApplication] unregisterForRemoteNotifications];Я запускаю его каждый раз, когда хочу отменить регистрацию из PN. Возможно, вам придется явно завершить приложение из списка "последние" и поиграть с Центром уведомлений в приложении "Настройки", чтобы получить его правильно.
кроме того, запрос пользовательского интерфейса с просьбой пользователя зарегистрироваться для PN может не отображаться. Не уверен, что был отключен в любой из последних iOS версии.
Как сказал янолито, установка даты должна работать:
вы можете достичь последнего, фактически не дожидаясь дня, установив системные часы вперед на день или более, полностью выключив устройство, а затем снова включив устройство.
Я заметил на своем устройстве (iPhone 4, iOS 6.1.2) установку системных часов на день вперед или даже на несколько дней не получилось для меня. Поэтому я установил дату вперед месяц и тогда он сделал работа и мое приложение снова показали приглашение уведомлений.
надеюсь, что это поможет для всех, это может быть своего рода головная боль!
Я согласен с micmdk.. У меня была настройка среды разработки с Push-уведомлениями и мне нужен был способ сбросить мой телефон, чтобы он выглядел как начальная установка... и только эти точные шаги работали для меня ... требуется две перезагрузки устройства:
от APPLE TECH DOC:
сброс уведомления толчка разрешения оповещения на iOS В первый раз, когда приложение с поддержкой push-уведомлений регистрируется для push-уведомлений, iOS спрашивает пользователя, хотят ли они получать уведомления для этого приложения. Когда-то пользователь ответил на это предупреждение он не представлен снова, если устройство не будет восстановлено или приложение было удалено в течение по крайней мере одного дня.
Если вы хотите имитировать первый запуск вашего приложения, вы можете оставить приложение неустановленным в течение дня. Вы можете достичь последнего, не дожидаясь дня, выполнив следующие действия:
удалите приложение с устройства.
полностью выключите устройство и включите его снова на.
перейдите в Настройки > Общие > дата и время и установите дату вперед на день или более.
полностью выключите устройство и снова включите его.
Я думал об этом и пришел к выводу, что на самом деле не является действительным испытанием для моего кода. Я не думаю, что ваш код приложения может на самом деле сказать разницу между тем, кто отклоняет уведомления в первый раз или позже отключает его из настроек уведомлений iPhone. Это правда, что пользовательский опыт отличается, но это скрыто внутри вызова registerForRemoteNotificationTypes.
вызов unregisterForRemoteNotifications не полностью удаляет приложение из настроек уведомлений - хотя он удаляет содержимое настроек для этого приложения. Таким образом, это все равно не приведет к тому, что диалоговое окно будет представлено пользователю во второй раз при следующем запуске приложения (по крайней мере, не на v3.1.3, с которым я сейчас тестирую). Но, как я уже сказал выше, вы, вероятно, не должны беспокоиться об этом.
та же техническая заметка, что и в принятом ответе (TN2265-Устранение неполадок Push-уведомлений) С тех пор был обновлен с решением для iOS 5 и выше.
короче говоря: создать резервную копию и восстановить из него каждый раз.
в iOS 5 и более поздних версиях сбросьте предупреждение о разрешениях push-уведомлений, восстановив устройство из резервной копии (r. 11450187). Вот шаги, чтобы сделать это эффективно:
- используйте Xcode Органайзер для установки приложения на устройство. Ключ состоит в том, чтобы установить приложение в первый раз без его запуска.
- использование iTunes для резервного копирования устройства.
- выполнить приложение. Будет представлено оповещение о разрешениях push-уведомлений.
- если вы хотите сбросить предупреждение о разрешениях push-уведомлений, восстановите устройство из резервной копии, созданной на первом шаге.
Apple Tech Примечание также описано вы можете восстановить устройство, чтобы сбросить диалоговое окно уведомления толчка.
Это не говорит о том, что вы также можете использовать опцию "Общие -> Сброс -> Стереть все содержимое и настройки" на самом устройстве (iOS 5.икс.)
в дополнение к ответу янолито.
была такая же проблема с приложением, которое я загрузил год назад и изначально отрицал push-уведомление. Теперь, желая получить уведомления толчка назад, эти шаги работали для меня на iOS 7 beta. Не уверен, какая точка(ы) вызвала его точно.
- закройте и удалите приложение.
- перейдите в Настройки iCloud и удалите приложение из iCloud. Сделайте это на всех других устройствах, на которых включено резервное копирование iCloud для приложений. После деактивация и удаление сделать новую резервную копию. Приложение больше не должно быть указано в разделе "резервные копии". (Возможно, именно поэтому техническая Заметка от Apple, описанная ianolito, перестала работать в iOS 5, поскольку iCloud был представлен в iOS 5, и многие из них поддерживают резервное копирование iCloud для приложений.)
- зайди в настройки времени и установки времени более чем на 1 месяц вперед.
- выключите iPhone (без сброса).
- подождите минуту, включите его снова и загрузите приложение снова.
- запустите приложение, и мне снова был представлен диалог.
- снова включить резервное копирование приложения, так как оно все еще деактивировано. Поправьте время.
слава богу, мне не пришлось "стирать все содержимое и настройки". Может быть, это кому-то поможет.
после нескольких часов поиска, и не повезло с предложениями выше, это работало как шарм для 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 } }
Comments