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