CKDatabaseSubscription 不推送通知
CKDatabaseSubscription not pushing notifications
我正在尝试通过 CKDatabaseSubscription
接收更改,但我无法从该订阅中收到任何推送通知。
我正在通过这种方法订阅私人记录区的变化:
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 和私人区域,我可以使用类似的东西并且它有效:
CKQuerySubscription(recordType: "TestRecordType", predicate: NSPredicate(format: "TRUEPREDICATE"), options: CKQuerySubscriptionOptions.firesOnRecordCreation)
至于知道 CKDatabaseSubscription
只会为具有 CKRecordZoneCapabilityFetchChanges
的记录区域触发通知,所有私人自定义区域都具有该功能(我认为也是共享的),默认区域没有。
所以现在唯一的办法就是创建新的自定义区域。
我正在尝试通过 CKDatabaseSubscription
接收更改,但我无法从该订阅中收到任何推送通知。
我正在通过这种方法订阅私人记录区的变化:
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 和私人区域,我可以使用类似的东西并且它有效:
CKQuerySubscription(recordType: "TestRecordType", predicate: NSPredicate(format: "TRUEPREDICATE"), options: CKQuerySubscriptionOptions.firesOnRecordCreation)
至于知道 CKDatabaseSubscription
只会为具有 CKRecordZoneCapabilityFetchChanges
的记录区域触发通知,所有私人自定义区域都具有该功能(我认为也是共享的),默认区域没有。
所以现在唯一的办法就是创建新的自定义区域。