Сбросить настройки уведомлений для приложения

Я разрабатываю приложение с push-уведомлениями. Чтобы проверить все возможные способы взаимодействия с пользователем, я хотел бы протестировать свое приложение, когда пользователь отказывается иметь push-уведомления для моего приложения во время первого запуска.

Диалог (инициированный registerForRemoteNotificationTypes ), однако, появляется только один раз для каждого приложения. Как сбросить память ОС iPhone для моего приложения. Удаление приложения и переустановка не помогают.

Техническая нота TN2265: поиск и устранение неисправностей Push Notifications

В первый раз, когда приложение с поддержкой push-приложений регистрируется для push-уведомлений, iOS запрашивает у пользователя, хотят ли они получать уведомления для этого приложения. Как только пользователь ответил на это предупреждение, он не будет представлен повторно, если устройство не будет восстановлено или приложение не будет удалено, по крайней мере, на один день.

Если вы хотите имитировать первый запуск вашего приложения, вы можете оставить приложение удаленным в течение дня. Вы можете добиться последнего, не дожидаясь дня, установив системные часы вперед на день или более, полностью выключив устройство, а затем снова включив устройство.

Обновление: как отмечено в комментариях ниже, это решение перестало работать с iOS 5.1. Я бы рекомендовал подавать ошибку в Apple, чтобы они могли обновить свою документацию. Похоже, что текущее решение вызывает сброс содержимого и настроек устройства.

Обновление . Техническая нота была обновлена ​​с новыми шагами, которые работают правильно с iOS 7.

  1. Удалите приложение с устройства.
  2. Полностью выключите устройство и включите его снова.
  3. Откройте «Настройки»> «Основные»> «Дата и время» и установите дату в день или более.
  4. Полностью выключите устройство и снова включите его.

ОБНОВЛЕНИЕ с IOS 9

Простое удаление и повторная установка приложения notDetermined статус уведомления до notDetermined (появятся подсказки).

Благодаря ответу Gomfucius ниже: https://stackoverflow.com/a/33247900/704803

Еще одно решение для тестирования – просто сменить идентификатор пакета. Просто не забудьте изменить его, как только вы закончите!

На iOS 9.0.2 каждый раз, когда я удаляю приложение и переустанавливаю его, я получаю уведомление об уведомлении о появлении оповещения. Это справедливо как для загрузки приложений AppStore, так и для режима adhoc.

UPDATE: подтверждено, что это работает для iOS 9.x

Как уже отмечалось, для сброса состояния уведомления для приложения на устройстве изменен для iOS5 новый.

Это работает для меня на iOS6:

  • Удалите приложение с устройства
  • Установите устройство в течение двух или более дней вперед
  • Перезапустить устройство
  • Установите устройство в течение двух или более дней вперед
  • Перезапустить устройство
  • Установка и запуск приложения снова

Однако это приведет только к тому, что первоначальное приглашение появится снова – оно не удалит другие вещи, связанные с Push Push.

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

… содержит зарегистрированных клиентов для push-уведомлений. Удаление записи вашего приложения приведет к повторному появлению приглашения

Делать это программно, кажется, работает для меня каждый раз. У меня есть assembly со следующей строки без комментариев:

  [[UIApplication sharedApplication] unregisterForRemoteNotifications]; 

Я запускаю его каждый раз, когда хочу отменить регистрацию из PN. Возможно, вам придется закрыть приложение явно из списка рецензентов и поиграть с Центром уведомлений в приложении «Настройки», чтобы все было правильно.

Кроме того, приглашение пользовательского интерфейса, запрашивающее у пользователя регистрацию для PN, может не отображаться. Не уверен, что был отключен в любой из последних версий iOS.

Как сказал ianolito, установка даты должна работать:

Вы можете добиться последнего, не дожидаясь дня, установив системные часы вперед на день или более, полностью выключив устройство, а затем снова включив устройство.

Я заметил на своем устройстве (iPhone 4, iOS 6.1.2) настройку системных часов на день вперед или даже несколько дней для меня не работал . Поэтому я задал дату вперед месяц, а затем она работала, и мое приложение снова показало подсказку уведомлений.

Надеюсь, это поможет кому угодно, это может быть голова болит!

Я согласен с micmdk. У меня была настройка среды разработки с Push Notifications и мне нужен способ сбросить мой телефон, чтобы он выглядел как начальная установка … и только эти точные шаги работали для меня … требует двух перезагрузок устройства:

От APPLE TECH DOC:

Сброс предупреждений о разрешении Push-уведомлений в iOS При первом включении приложений с поддержкой push-push для push-уведомлений iOS запрашивает у пользователя, хотят ли они получать уведомления для этого приложения. Как только пользователь ответил на это предупреждение, он не будет представлен повторно, если устройство не будет восстановлено или приложение не будет удалено, по крайней мере, на один день.

Если вы хотите имитировать первый запуск вашего приложения, вы можете оставить приложение удаленным в течение дня. Вы можете достичь последнего, не ожидая дня, выполнив следующие шаги:

  1. Удалите приложение с устройства.

  2. Полностью выключите устройство и включите его снова.

  3. Откройте «Настройки»> «Основные»> «Дата и время» и установите дату в день или более.

  4. Полностью выключите устройство и снова включите его.

В прошлом я задавался вопросом об этом и пришел к выводу, что это действительно не действительный тестовый пример для моего кода. Я не думаю, что ваш код приложения действительно может отличить какое-то отклонение уведомлений от первого раза или позже, отключив его из настроек уведомлений iPhone. Это правда, что пользовательский интерфейс отличается от другого, но скрыт в вызове registerForRemoteNotificationTypes.

Вызов unregisterForRemoteNotifications не полностью удаляет приложение из настроек уведомлений – хотя он удаляет содержимое настроек для этого приложения. Таким образом, это все равно не приведет к тому, что диалог будет отображаться во второй раз пользователю при следующем запуске приложения (по крайней мере, не в версии v3.1.3, с которой я сейчас тестирую). Но, как я уже говорил выше, вы, наверное, не должны беспокоиться об этом.

То же самое, что упоминалось в принятом ответе ( TN2265 – Устранение неполадок Push-уведомлений) , было обновлено с помощью решения для iOS 5 и выше.

Короче: создавайте резервную копию и восстанавливайте ее каждый раз.

На iOS 5 и более поздних версиях сбросьте оповещение о предупреждениях push-уведомлений, восстановив устройство из резервной копии (r. 11450187). Вот шаги для этого:

  1. Используйте Xcode Organizer для установки приложения на устройство. Ключом является установка приложения в первый раз без его запуска.
  2. Используйте iTunes для резервного копирования устройства.
  3. Запустите приложение. Будет представлен предупреждающий сигнал оповещений push-уведомлений.
  4. Если вы хотите сбросить предупреждение о разрешении push-уведомлений, восстановите устройство из резервной копии, созданной на первом этапе.

В Apple Tech Note также описано, как восстановить устройство для сброса диалогового windows Push Notification.

Он не говорит, что вы также можете использовать опцию «General -> Reset -> Erase All Content And Settings» на самом устройстве (iOS 5.x).

В дополнение к ответу ianolito.

Имел ту же самую проблему с приложением, которое я загрузил год назад, и сначала отказываюсь от push-уведомления. Теперь, возвращая push-уведомления, эти шаги работали для меня на бета-версии iOS 7. Не уверенный, какой пункт (ы) вызвал его точно.

  • Закройте и удалите приложение.
  • Перейдите в настройки 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 } } 
  • Как использовать Push-уведомления в форматах Xamarin
  • Уведомление GCM Push с Asp.Net
  • Уведомления не отображаются в Android Oreo (API 26)
  • UIApplication.registerForRemoteNotifications () необходимо вызывать только из основного streamа
  • Давайте будем гением компьютера.