У меня была такая же проблема: вызов не registerForRemoteNotificationTypes:вызвал application:didRegisterForRemoteNotificationsWithDeviceToken:ниapplication:didFailToRegisterForRemoteNotificationsWithError:
В конце концов я решил эту проблему с помощью технической заметки Apple TN2265 .
Вот что я сделал:
Во-первых, я дважды проверил, что я действительно правильно регистрируюсь для push-уведомлений , включая проверку моего профиля обеспечения для ключа «aps-environment» и кодовой подписи самого файла .app. У меня все было настроено правильно.
Затем мне пришлось отлаживать сообщения о состоянии push-уведомлений в консоли (вам необходимо установить профиль обеспечения PersistentConnectionLogging.mobileconfig на вашем устройстве и перезагрузить его. См. TN2265 в разделе «Наблюдение за сообщениями о состоянии push-уведомлений »). Я заметил, что процесс apns запускает таймер и вычисляет минимальную дату срабатывания, что заставило меня подозревать, что сообщение с подтверждением регистрации push-уведомления, которое обычно отображается в этот момент, подавляется APNS, как указано в TN2265:
Сброс уведомления о разрешениях push-уведомлений на iOS
Когда приложение с поддержкой push регистрируется для получения push-уведомлений в первый раз, iOS спрашивает пользователя, хотят ли они получать уведомления для этого приложения. После того, как пользователь ответил на это предупреждение, оно больше не отображается, если устройство не будет восстановлено или приложение не было удалено в течение как минимум одного дня.
Если вы хотите смоделировать первый запуск своего приложения, вы можете оставить приложение неустановленным на день. Вы можете достичь последнего, фактически не дожидаясь дня, установив системные часы на день или более вперед, полностью выключив устройство, а затем снова включив его.
Итак, я удалил приложение с устройства, затем вручную изменил дату iPhone в настройках, перезагрузил устройство и повторно установил приложение.
В следующий раз, когда мой код вызвал registerForRemoteNotificationTypes, он получил обратные вызовы, как и ожидалось.
Это решило проблему для меня. Надеюсь, это поможет.