Trying to use CKQuerySubscription on a shared record

34 Views Asked by At

as the title says, I'm trying to subscribe for changes using CKQuerySubscription, the subscription is correctly created (present on CK dashboard) but I'm not receiving a notification on my phone (not simulator)

Here is the code:

`func createGroup(name: String) async {
        guard let userID = PersistenceManager.shared.fetchUserInfo()?.userRecordID
        else { return }

        loadingNewGroup = true
        
        let group = ExpensesGroup.create(name: name, userID: userID)
        await PersistenceManager.shared.context.perform {
            try! PersistenceManager.shared.context.save()
        }
        
        self.selectedExpensesGroup = group

        await PersistenceManager.shared.createShare(group)
        
        await createQuerySubscription(group)
        
        loadingNewGroup = false
        sheetToShow = nil
        sheetToShow = .manageShare
    }
    
    func createQuerySubscription(_ group: ExpensesGroup) async {
        let privateDB = PersistenceManager.shared.ckContainer.privateCloudDatabase

        let predicate = NSPredicate(value: true)
        
        let shareSubscription = CKQuerySubscription(recordType: "cloudkit.share", predicate: predicate, subscriptionID: "\(group.id ?? "")", options: [.firesOnRecordCreation, .firesOnRecordDeletion, .firesOnRecordUpdate])
        
        let notification = CKSubscription.NotificationInfo()
        notification.shouldSendContentAvailable = true
        
        shareSubscription.notificationInfo = notification
        
        let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [shareSubscription])
        
        operation.modifySubscriptionsResultBlock = { result in
            print(result)
        }
        
        operation.qualityOfService = .userInteractive
        
        privateDB.add(operation)
    }
    `

I tried using CD_ExpensesGroup (It's the actual recordName) instead of "cloudkit.share" same result.

I put a print("notification") in appdelegate func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

0

There are 0 best solutions below