Техническое примечание TN2265: устранение неполадок push-уведомлений
В первый раз, когда приложение с поддержкой push-уведомлений регистрируется для push-уведомлений, iOS спрашивает пользователя, хотят ли они получать уведомления для этого приложения. После того, как пользователь ответил на это предупреждение, оно больше не будет отображаться, пока устройство не будет восстановлено или приложение не будет удалено в течение как минимум одного дня.
Если вы хотите имитировать первый запуск своего приложения, вы можете оставить приложение удаленным на один день. Вы можете достичь последнего, фактически не ожидая дня, установив системные часы на один день или более, полностью выключив устройство, а затем снова включив его.
Обновление: как отмечено в комментариях ниже, это решение перестало работать с iOS 5.1. Я бы посоветовал сообщить об ошибке в Apple, чтобы они могли обновить свою документацию. Похоже, текущим решением является сброс содержимого и настроек устройства.
Обновление: техническая заметка была обновлена с новыми шагами, которые работают правильно с iOS 7.
- Удалите приложение с устройства.
- Полностью выключите устройство и включите его снова.
- Выберите «Настройки»> «Основные»> «Дата и время» и установите дату на день вперед или более.
- Снова полностью выключите устройство и включите его снова.
ОБНОВЛЕНИЕ с iOS 9
Простое удаление и переустановка приложения приведет к сбросу статуса уведомления notDetermined
(то есть появятся подсказки).
Благодаря ответу Gomfucius ниже:
https://stackoverflow.com/a/33247900/704803
Еще одно решение для тестирования - просто изменить идентификатор вашего пакета. Только не забудьте поменять его обратно, когда закончите!
источник
На iOS 9.0.2 я получаю «уведомление о регистрации push-уведомлений» каждый раз, когда удаляю приложение и переустанавливаю его. Это верно как для производственных загрузок AppStore, так и для режима adhoc.
ОБНОВЛЕНИЕ: Подтверждено, что это работает для iOS 9.x
источник
Как уже отмечалось, подход для сброса состояния уведомления для приложения на устройстве изменен для iOS5 на более новый.
Это работает для меня на iOS6:
Однако, это только заставит первоначальное приглашение появиться снова - оно не удалит другие вещи, связанные с состоянием push.
источник
Plist: /private/var/mobile/Library/RemoteNotification/Clients.plist
... содержит зарегистрированных клиентов для push-уведомлений. Удаление записи вашего приложения вызовет повторное появление запроса
источник
Выполнение этого программно, кажется, работает для меня каждый раз. У меня есть сборка со следующей строкой без комментариев:
Я запускаю его каждый раз, когда хочу отменить регистрацию в PN. Возможно, вам придется явно закрыть приложение из списка последних и поэкспериментировать с Центром уведомлений в приложении «Настройки», чтобы сделать это правильно.
Кроме того, запрос пользовательского интерфейса, запрашивающий у пользователя регистрацию PN, может не отображаться. Не уверен, что было отключено в любой из последних версий iOS.
источник
Как сказал Ианолито, установка даты должна работать:
Я заметил, что на моем устройстве (iPhone 4, iOS 6.1.2) установка системных часов на день вперед или даже на несколько дней у меня не работает . Поэтому я установил дату на месяц вперед, и затем она сработала, и мое приложение снова показало запрос уведомлений.
Надеюсь, что это поможет кому-то, это может быть как болит голова!
источник
Я согласен с micmdk ... У меня была настройка среды разработки с Push-уведомлениями, и мне нужен был способ перезагрузить телефон, чтобы он выглядел как первоначальная установка ... и только эти точные шаги сработали для меня ... требуется две перезагрузки устройства:
Из APPLE TECH DOC:
Сброс оповещения о разрешениях push-уведомлений на iOS Когда приложение с push-уведомлениями регистрируется впервые для push-уведомлений, iOS спрашивает пользователя, хотят ли они получать уведомления для этого приложения. После того, как пользователь ответил на это предупреждение, оно больше не будет отображаться, пока устройство не будет восстановлено или приложение не будет удалено в течение как минимум одного дня.
Если вы хотите имитировать первый запуск своего приложения, вы можете оставить приложение удаленным на один день. Вы можете достичь последнего, фактически не ожидая дня, выполнив следующие действия:
Удалите приложение с устройства.
Полностью выключите устройство и включите его снова.
Выберите «Настройки»> «Основные»> «Дата и время» и установите дату на день вперед или более.
Снова полностью выключите устройство и включите его снова.
источник
Я задавался вопросом об этом в прошлом и пришел к выводу, что на самом деле это не был действительный тестовый пример для моего кода. Я не думаю, что код вашего приложения на самом деле может показать разницу между тем, кто отклоняет уведомления в первый раз или позже, отключив его в настройках уведомлений iPhone. Это правда, что пользовательский интерфейс отличается, но это скрыто в вызове registerForRemoteNotificationTypes.
Вызов unregisterForRemoteNotifications не полностью удаляет приложение из настроек уведомлений, хотя и удаляет содержимое настроек для этого приложения. Таким образом, это все равно не приведет к тому, что диалоговое окно будет представлено пользователю во второй раз при следующем запуске приложения (по крайней мере, не в версии 3.1.3, с которой я сейчас тестирую). Но, как я сказал выше, вы, вероятно, не должны беспокоиться об этом.
источник
Та же техническая заметка, на которую ссылаются в принятом ответе ( TN2265 - Устранение неполадок, связанных с push-уведомлениями) , с тех пор была дополнена решением для iOS 5 и выше.
Короче говоря: каждый раз создавайте резервную копию и восстанавливайте ее.
источник
В Apple Tech Note также описано, что вы можете восстановить устройство, чтобы сбросить диалоговое окно push-уведомлений.
Это не означает, что вы также можете использовать опцию «Общие -> Сброс -> Стереть все содержимое и настройки» на самом устройстве (iOS 5.x).
источник
В дополнение к ответу Ианолито.
У меня была та же проблема с приложением, которое я скачал год назад и которое изначально не давало push-уведомлений. Теперь, желая получить push-уведомления, эти шаги работали для меня на iOS 7 beta. Не уверен, какой пункт (ы) вызвал это точно.
Слава богу, мне не пришлось «Стереть все содержимое и настройки». Может быть, это кому-то поможет.
источник
Я недавно столкнулся с подобной проблемой с реакцией родного приложения. Версия iPhone OS была 13,1 Я удалил приложение и попытался установить приложение и заметил, что и местоположение, и разрешения на уведомления не запрашивались.
При проверке настроек я мог видеть, что мое приложение было включено для определения местоположения (из предыдущей установки), однако не было соответствующей записи против уведомления. Попытка удаления и перезагрузки без установки времени не сработала. Кстати, я также пытался загрузить приложение Appstore, все еще то же поведение.
Проблема была решена только после установки времени устройства.
источник
После нескольких часов поисков, и без удачи с предложениями выше, это сработало как прелесть для 3.x +
источник