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

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

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

13 ответов


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

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

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

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

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

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

обновление с iOS 9

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

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


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


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

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


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

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

  • удалить приложение с устройства
  • установите устройство datetime на два дня или более вперед
  • перезагрузка устройства
  • установите устройство datetime на два дня или более вперед
  • перезагрузка устройства
  • установите и запустите приложение опять

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


файле plist: / частный / var / мобильный / библиотека / RemoteNotification / клиенты.файл plist

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


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

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

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


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

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

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

надеюсь, это поможет для всех, это может быть своего рода головная боль!


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

от Apple TECH DOC:

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

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

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

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

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

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


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

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


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

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

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

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

в Apple Tech Note также описано, что вы можете восстановить устройство для сброса диалогового окна Push-уведомления.

Он не говорит, что вы также можете использовать опцию "Общие -> Сброс -> Стереть все содержимое и настройки" на самом устройстве (iOS 5.икс.)


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

была такая же проблема с приложением, которое я загрузил год назад, и изначально отрицал push-уведомление. Теперь, желая вернуть 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
        }

    }