У меня есть приложение в App Store, которое работает с CloudKit, и удаленные уведомления там отлично работают. Если пользователь изменяет запись, на других его устройствах запускается push-уведомление и вызывается didReceiveRemoteNotification
AppDelegate.
В среде разработки я добавил несколько новых сущностей, но при тестировании push-уведомления больше не поступают. В основном didReceiveRemoteNotification
вообще не вызывается.
Некоторые важные примечания:
это не работает только на iOS ... в моем приложении Mac, указывая на тот же контейнер CloudKit, удаленные уведомления принимаются правильно, поэтому это не имеет ничего общего с тем, как создается или изменяется подписка CloudKit (я не менял в любом случае ничего в этом отношении)
Я звоню
registerForRemoteNotifications
, как и раньше, аdidRegisterForRemoteNotificationsWithDeviceToken
вызывается, как ожидалосьЯ тестирую устройство, а не симулятор
На устройстве включено фоновое обновление приложения.
Уведомления разрешены для приложения
Объект CKNotificationInfo создается с
shouldSendContentAvailable
= YES иalertBody
= @ "" (не нулевой строкой)
Я покопался в журналах консоли устройства, используя Xcode, и обнаружил, что консоль выводит что-то, что предполагает, что устройство получает push-уведомление, но по какой-то причине оно не передается в приложение:
default 18:02:47.127117 -0800 SpringBoard Received incoming message on topic com.apple.icloud-container.com.ztest.myapp at priority 10
default 18:02:47.133708 -0800 SpringBoard [com.ztest.myapp] Received remote notification request 0E01-5E4D [ waking: 0, hasAlertContent: 0, hasSound: 0 hasBadge: 0 hasContentAvailable: 1 hasMutableContent: 0 pushType: Alert]
default 18:02:47.133780 -0800 SpringBoard [com.ztest.myapp] Process delivery of push notification 0E01-5E4D
error 18:02:47.133851 -0800 SpringBoard [com.ztest.myapp] NOT requesting DUET deliver content-available, non-notifiying push notification 0E01-5E4D [pushType: Alert willNotifyUser: 0]
error 18:02:47.133997 -0800 SpringBoard [com.ztest.myapp] NOT delivering non-notifying push notification 0E01-5E4D [pushType: Alert willNotifyUser: 0]
default 18:02:47.134053 -0800 SpringBoard Getting effectiveSectionInfo for section identifier: com.ztest.myapp
default 18:02:47.134099 -0800 SpringBoard [com.ztest.myapp] Getting effective section info
default 18:02:47.135743 -0800 SpringBoard [com.ztest.myapp] Got effective section info [ hasResult: 1 ]
Я не совсем уверен, но похоже, что одна строка здесь, в которой отображается «ошибка» с «НЕ доставляет push-уведомление без уведомления», объясняет проблему. Но я не уверен, чем это вызвано. Может быть, просто среда разработки нестабильна? Я пробовал это на нескольких устройствах iOS, так что проблема не только в этом устройстве.
Может ли кто-нибудь предложить какие-либо причины, по которым push-уведомление не поступает в приложение, или предложить способ проверить это и сузить то, что происходит?
Спасибо.
ОБНОВЛЕНИЕ
Оказывается, я не совсем уверен, работает ли тихое push-уведомление и в производственной версии! Похоже, что push отправляется сервером CloudKit (глядя на панель инструментов CK), но не принимается на устройстве.