didFailToRegisterForRemoteNotificationsWithError: пользователь отказался от ошибки?

Если пользователь откажется включить push-уведомления, мы получим ошибку через didFailToRegisterForRemoteNotificationsWithError. Кто-нибудь знает, каким будет код в объекте NSError в этом случае (чтобы отличить его, скажем, от отсутствия соединения)?


person Colin    schedule 08.02.2012    source источник
comment
Вы действительно должны дать ответ Джерреду - это правильный ответ. Мне просто нужно было перепроверить это для одного из клиентов моей компании. Загрузили наше корпоративное приложение (которое использует производственные push-сервисы), запретили все уведомления по запросу, и приложение по-прежнему получило токен. Включение их в настройках, перезапуск приложения, затем отключение их в настройках, перезапуск приложения - во всех случаях токен возвращается правильно.   -  person David H    schedule 02.12.2014


Ответы (4)


Я не думаю, что ваше первоначальное утверждение (всегда) верно. Если приложение правильно подписано с допустимым профилем подготовки, вызов registerForRemoteNotificationTypes: приведет к application:didRegisterForRemoteNotificationsWithDeviceToken: независимо от выбора пользователем уведомлений в приложении «Настройки». По моему опыту, единственный раз, когда я видел, как application:didFailToRegisterForRemoteNotificationsWithError: вызывали, было из-за неправильно подписанного приложения. В рассматриваемой ошибке упоминалось, что «для приложения не найдено действительное право на среду aps».

person Jerred    schedule 03.04.2012

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

Ответ на главный вопрос в теме: НЕТ.

application:didFailToRegisterForRemoteNotificationsWithError: вызывается, когда приложение подписано с неправильным профилем подготовки.

Также,

application:didRegisterForRemoteNotificationsWithDeviceToken: вызывается только тогда, когда пользователь включает хотя бы один из параметров значка, баннера/оповещения или звука в центре уведомлений (в приложении "Настройки") для вашего приложения.

Существуют сценарии, в которых iOS не будет вызывать ни один из этих методов.

  • Когда пользователь отказывается предоставить приложению разрешения на отправку push-уведомлений
  • Когда нет сетевого подключения и предоставленных пользователем разрешений на отправку push-уведомлений.
  • Когда пользователь отключает push-уведомления для приложения из центра уведомлений в приложении «Настройки».
person apalvai    schedule 18.04.2014
comment
Это хорошая статья, за исключением одной части: существуют отдельные среды для APNS: песочница (для разработки и специальных сборок) и рабочая среда. Каждый из них имеет свой собственный сертификат, и процедуру подготовки необходимо повторять между ними. Специальные сборки фактически попадают в производственную APNS: операционная система устанавливает постоянное соединение со средой песочницы для сборок разработки; специальные и дистрибутивные сборки подключаются к производственной среде. от разработчика .apple.com/library/ios/technotes/tn2265/_index.html#// - person Bay Phillips; 08.05.2014
comment
Было бы здорово обновить ответ тем, что в статье описано как передовой опыт, поскольку сейчас он больше не доступен. - person leolobato; 08.05.2015
comment
Согласен с @leolobato, ссылка на статью больше недействительна. - person Zorayr; 18.05.2015
comment
Изменилось одно: didRegisterForRemoteNotificationsWithDeviceToken по-прежнему вызывается, даже если все ваши уведомления отключены. - person Merricat; 22.03.2019

По моему опыту, метод didFailToRegisterForRemoteNotificationsWithError: зарезервирован для более серьезных случаев, что не позволяет приложению даже отображать диалоговое окно запроса разрешения на уведомление пользователю. Известные мне случаи включают запуск приложения на устройствах, не поддерживающих push-уведомления (например, Simulator), или некоторую неправильную конфигурацию в праве на aps-среду в двоичном файле приложения.

person Şafak Gezer    schedule 15.01.2015

У меня было 2 файла с правами, здесь я добавил Aps-enviroment: production, и он заработал после введите здесь описание изображения

person Kingsley Mitchell    schedule 27.11.2018