2016-10-11 2 views
-1

Я делаю приложение для обмена сообщениями и в качестве службы push-уведомлений использую CloudKit. Работа с push-уведомлениями, вероятно, связана с предикатом «TRUEPREDICATE», но проблема в том, что A отправляет сообщение в B, C также получает push-уведомление. Теперь мой вопрос заключается в том, как я могу фильтровать предикат, который получает только тот, кто получает сообщение push-уведомление.CloudKit Predicate

let database = CKContainer.default().publicCloudDatabase 
    let predicate = NSPredicate(format: "TRUEPREDICATE") 
    let subscription = CKQuerySubscription(recordType: "Message", predicate: predicate, options: .firesOnRecordCreation) 

    let notification = CKNotificationInfo() 
    notification.alertBody = "You have a new message!" 
    notification.soundName = "default" 

    subscription.notificationInfo = notification 

    database.save(subscription) { result, error in 
     if let error = error { 
      print(error.localizedDescription) 
     } 
    } 
+0

Было бы полезно, если бы вы могли отредактировать свой вопрос, включив соответствующий код. – breakingobstacles

ответ

0

В вашем примере будет инициировано push-уведомление для каждого устройства, на которое настроена подписка на запрос. Если вы хотите исправить это, вам нужно будет изменить предикат, чтобы ограничить уведомления текущим пользователем/устройством.

Например, если вы отслеживаете уникальный идентификатор для конкретного пользователя:

let userID = UUID().uuidString 
let predicate = NSPredicate(format: "%K == %@", argumentArray: ["recipient", userID]) 

В этом примере, «получатель» это имя CloudKit поля.

+0

Это отлично работает для меня, спасибо! –