我有来自CloudKit的推送通知,但恐怕我已经做了一些事情来打破它们。如果有人看到我看不到的东西,请帮忙。
应用启动时,我呼叫setupSubscriptions()
,其代码如下:
let predicate = NSPredicate(value: true)
let subscriptionID = "public-new-changes-deleted"
let subscription = CKQuerySubscription(recordType: recordType, predicate: predicate, subscriptionID: subscriptionID, options: [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
publicDB.save(subscription) { subscription, error in
if error != nil {
print("subscription was set up")
}
设置消息确实触发。我也尝试过制作notificationInfo CKQuerySubscription.NotificationInfo
,但无论是{{1}还是CKSubscription
都没有明显的区别。
在我的应用程序委托中:
application.registerForRemoteNotifications()
我愿意从application(_ application:, didRegisterForRemoteNotificationsWithDeviceToken:)
得到一条消息,表明该应用程序已注册了通知。
那我有:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("application did receive remote notification")
}
接下来,我进入CloudKit仪表板并创建,修改或删除记录,但是什么也没有发生。我希望收到didReceiveRemoteNotification
的消息。但是什么都没有。这项工作较早,但我想不出要更改的内容。
我可以在那里创建记录并在应用程序中查询它们,因此我确定它可以看到它们,但是当它们被更改时我无法推动。
其他内容:
在目标的“功能”标签中:
recordType
和publicDB CKDatabase
对象从CloudKit进行提取。 development
”的“ APS Environment”标志。在我的Apple Developer帐户页面上的“应用程序ID”下,“ iCloud”和“推送通知”的“开发”和“发行版”都亮绿灯。
我可以在CloudKit仪表板中看到,一旦运行应用程序,订阅类型就会创建。
我正在设备上而不是模拟器上进行测试。
我尝试过:
shouldBadge
,并使用UNUserNotificationCenter
请求通知,并使App Delegate成为UNUserNotificationCenterDelegate
。初次运行该应用程序时出现提示,但通知没有到达。.firesOnRecordCreation
的一个订阅和一个用于更新和删除的订阅。CKModifySubscriptionsOperation
而不是数据库的save
方法添加订阅。如果您有任何想法请告诉我。谢谢。