Сброс настроек push-уведомлений для приложения - PullRequest
168 голосов
/ 13 марта 2010

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

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

Ответы [ 13 ]

297 голосов
/ 02 ноября 2010

Техническое примечание TN2265: поиск и устранение неисправностей push-уведомлений

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

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

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

Обновление: В техническую заметку добавлены новые шаги, которые корректно работают с iOS 7.

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

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

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

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

47 голосов
/ 12 апреля 2013

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

35 голосов
/ 21 октября 2015

В iOS 9.0.2 я получаю «уведомление о регистрации push-уведомлений» каждый раз, когда удаляю приложение и переустанавливаю его. Это верно как для производственных загрузок AppStore, так и для режима adhoc.

ОБНОВЛЕНИЕ: Подтверждено, что это работает для iOS 9.x

19 голосов
/ 29 августа 2013

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

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

  • Удалитеприложение с устройства
  • Установка даты и времени устройства на два дня вперед или более
  • Перезагрузка устройства
  • Установка даты и времени устройства вперед на два дня
  • Перезагрузкаустройство
  • Установите и снова запустите приложение

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

9 голосов
/ 13 апреля 2010

лист: /private/var/mobile/Library/RemoteNotification/Clients.plist

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

7 голосов
/ 27 марта 2013

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

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

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

5 голосов
/ 08 января 2014

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

Из APPLE TECH DOC:

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

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

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

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

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

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

5 голосов
/ 02 февраля 2013

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

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

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

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

3 голосов
/ 25 апреля 2013

Та же техническая заметка, на которую ссылаются в принятом ответе ( TN2265 - Устранение неполадок, связанных с push-уведомлениями) * С тех пор обновлено решением для iOS 5 и выше.

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

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

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

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

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

...