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

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

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

Ответ 1

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

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

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

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

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

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

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

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

Благодаря ответу Gomfucius ниже: fooobar.com/questions/38134/...

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

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

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

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

Ответ 7

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

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

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

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

Ответ 8

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

От APPLE TECH DOC:

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

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

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

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

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

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

Ответ 9

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

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

Ответ 10

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

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

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

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

Ответ 11

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

В нем не говорится, что вы также можете использовать опцию "General → reset → Erase All Content And Settings" на самом устройстве (iOS 5.x).

Ответ 12

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

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

  • Закрыть и удалить приложение.
  • Перейдите в настройки iCloud и удалите приложение из iCloud. Сделайте это на всех других устройствах, на которых включена резервная копия iCloud для приложений. После деактивации и удаления сделайте новую резервную копию. Приложение не должно быть больше указано в резервных копиях. (Возможно, именно поэтому Техническая нота от Apple, описанная ianolito, перестала работать в iOS 5, поскольку iCloud был представлен в iOS 5, а у многих есть резервная копия iCloud для приложений.)
  • Перейдите к настройкам времени и установите время более чем на 1 месяц вперед.
  • Отключите iPhone (нет reset).
  • Подождите минуту, включите его снова и снова загрузите приложение.
  • Запустите приложение, и мне снова было предложено диалоговое окно.
  • Включите резервное копирование приложения, так как оно по-прежнему отключено. Исправьте время.

Слава богу, мне не нужно было "Стирать все содержимое и настройки". Может быть, это поможет кому-то.

Ответ 13

Я недавно столкнулся с подобной проблемой с реакцией родного приложения. Версия iPhone OS была 13.1 Я удалил приложение и попытался установить приложение и заметил, что и местоположение, и разрешения на уведомления не запрашивались.

При проверке настроек я мог видеть, что мое приложение было включено для определения местоположения (из предыдущей установки), однако не было соответствующей записи против уведомления. Попытка удаления и перезагрузки без установки времени не сработала. Кстати, я также пытался загрузить приложение Appstore, все еще то же поведение.

Проблема была решена только после установки времени устройства.

Ответ 14

После нескольких часов поиска, и не повезло с предложениями выше, это сработало как шарм для 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
        }

    }