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 的记录区域触发通知,所有私人自定义区域都具有该功能(我认为也是共享的),默认区域没有。

所以现在唯一的办法就是创建新的自定义区域。