ios - CKDatabaseSubscription 不推送通知

标签 ios swift cloudkit

我正在尝试通过 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/

相关文章:

ios - CNPropertyNotFetchedException 应用崩溃

ios - "Over Current Context"选项在 Xcode Storyboard 中不可用?

ios - 我无法使用物理键盘在uitextfield中键入

ios - Xcode 没有为 iCloud 和 CloudKit : "Add the iCloud containers entitlement to your App ID" fails 创建默认容器

swift - 使用 swift 在 CloudKit 中加载更多内容

ios - Azure 媒体服务 - iOS 上的字幕 - native 而非 AMP

ios - 错误 : Assigning non-escaping parameter 'publicationQuery' to an @escaping closure

ios - 以编程方式获取导航栏的高度

ios - 将两个单独的文件上传到具有相同名称的Firebase

arrays - 表不会加载/显示 CloudKit 数据