Уведомления CloudKit не принимаются на устройстве iOS

У меня есть приложение в 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), но не принимается на устройстве.


person Z S    schedule 12.02.2020    source источник


Ответы (1)


Оказывается, это была проблема iOS13, и она тоже не работала над версией Release. По-видимому, Apple изменила поведение таким образом, что при настройке CKSubscription свойство alertBody CKNotificationInfo должно быть nil, а не пустой строкой, что вам нужно было сделать, чтобы уведомления работали раньше.

person Z S    schedule 12.02.2020