Если пользователь откажется включить push-уведомления, мы получим ошибку через didFailToRegisterForRemoteNotificationsWithError. Кто-нибудь знает, каким будет код в объекте NSError в этом случае (чтобы отличить его, скажем, от отсутствия соединения)?
didFailToRegisterForRemoteNotificationsWithError: пользователь отказался от ошибки?
Ответы (4)
Я не думаю, что ваше первоначальное утверждение (всегда) верно. Если приложение правильно подписано с допустимым профилем подготовки, вызов registerForRemoteNotificationTypes:
приведет к application:didRegisterForRemoteNotificationsWithDeviceToken:
независимо от выбора пользователем уведомлений в приложении «Настройки». По моему опыту, единственный раз, когда я видел, как application:didFailToRegisterForRemoteNotificationsWithError:
вызывали, было из-за неправильно подписанного приложения. В рассматриваемой ошибке упоминалось, что «для приложения не найдено действительное право на среду aps».
Хотя этот вопрос старый и согласен с большей частью ответа @Jerred, я все равно подумал опубликовать обновленный ответ.
Ответ на главный вопрос в теме: НЕТ.
application:didFailToRegisterForRemoteNotificationsWithError: вызывается, когда приложение подписано с неправильным профилем подготовки.
Также,
application:didRegisterForRemoteNotificationsWithDeviceToken: вызывается только тогда, когда пользователь включает хотя бы один из параметров значка, баннера/оповещения или звука в центре уведомлений (в приложении "Настройки") для вашего приложения.
Существуют сценарии, в которых iOS не будет вызывать ни один из этих методов.
- Когда пользователь отказывается предоставить приложению разрешения на отправку push-уведомлений
- Когда нет сетевого подключения и предоставленных пользователем разрешений на отправку push-уведомлений.
- Когда пользователь отключает push-уведомления для приложения из центра уведомлений в приложении «Настройки».
По моему опыту, метод didFailToRegisterForRemoteNotificationsWithError:
зарезервирован для более серьезных случаев, что не позволяет приложению даже отображать диалоговое окно запроса разрешения на уведомление пользователю. Известные мне случаи включают запуск приложения на устройствах, не поддерживающих push-уведомления (например, Simulator), или некоторую неправильную конфигурацию в праве на aps-среду в двоичном файле приложения.