我正在尝试通过 CKDatabaseSubscription
接收更改,但我无法接收到来自该订阅的任何推送通知。
我正在通过这种方法订阅私有(private)记录区的变化:
let container = CKContainer.default()
func subscribeChanges() {
let subscription = CKDatabaseSubscription(subscriptionID: "test")
let notificationInfo = CKNotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: [])
operation.modifySubscriptionsCompletionBlock = { savedSubscriptions, deletedSubscriptionIDs, operationError in
if operationError != nil {
print(operationError)
return
} else {
print("Subscribed")
}
}
container.privateCloudDatabase.add(operation)
}
订阅成功。但是我没有在设备上收到任何通知,我已经用这种方法检查过:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.registerForRemoteNotifications()
return true
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
NSLog("Notification received")
}
我在连接到 XCode 的真实设备上进行测试,试图通过模拟器和 Apple 的仪表板推送更改。
更新
据我所知,CKDatabaseSubscription
仅适用于共享记录区域。对于公共(public)和私有(private)区域,我可以使用类似的东西并且它有效:
CKQuerySubscription(recordType: "TestRecordType", predicate: NSPredicate(format: "TRUEPREDICATE"), options: CKQuerySubscriptionOptions.firesOnRecordCreation)
最佳答案
至于知道 CKDatabaseSubscription
只会为具有 CKRecordZoneCapabilityFetchChanges
的记录区域触发通知,所有私有(private)自定义区域都具有该功能(我认为也是共享的),默认区域没有。
所以现在唯一的办法就是创建新的自定义区域。
关于ios - CKDatabaseSubscription 不推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41064236/