CKSubscription
doc mówi: Kiedy modyfikacja rekordu powoduje abonament na ogień, serwer wysyła powiadomienia push dla wszystkich urządzeń z tej subskrypcji z wyjątkiem jednego, który wydał pierwotną zmianę do rekord.przestrzegać usunięcie CKRecord poprzez CKSubscription nie działa
Załóżmy, że mam dwa urządzenia: device 1
i device 2
zalogowane z różnych kont iCloud. Załóżmy, że oba urządzenia zostały subskrybowane w celu usunięcia rekordu dla określonego typu rekordu.
- Jeśli
device 1
tworzy rekord, a następniedevice 1
usuwa ona następniedevice 2
otrzymywać powiadomienia - czyli WEDŁUG DOC, ale .. - Jeśli
device 1
tworzy rekord, a następniedevice 2
usuwa ona następniedevice 2
otrzymywać powiadomienia - I nie sądzę, że jest zgodna z DOC, a to nie ma żadnego sensu,device 2
usunięte takdevice 1
powinny być zgłoszone
SET UP abonament na urządzenie 1 oraz urządzenie 2
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
application.registerForRemoteNotifications()
let defaultContainer = CKContainer.defaultContainer()
let publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in
if error == nil {
if subscriptions.count == 0 {
let subscription = CKSubscription(recordType: "OU", predicate: NSPredicate(value: true), options: .FiresOnRecordDeletion)
subscription.notificationInfo = CKNotificationInfo()
subscription.notificationInfo.shouldBadge = false
subscription.notificationInfo.alertBody = "OU removed or upated"
publicDatabase.saveSubscription(subscription, completionHandler: {subscription, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
} else {
println("\(error.localizedDescription)")
}
})
return true
}
utworzyć kartę na urządzeniu 1
@IBAction func addOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
let r = CKRecord(recordType: "OU", recordID: CKRecordID(recordName: "aaaa"))
publicDatabase.saveRecord(r, completionHandler: { r2, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
DELETE nagrywać na urządzenie 2
@IBAction func removeOU(sender: AnyObject) {
var defaultContainer = CKContainer.defaultContainer()
var publicDatabase = defaultContainer.publicCloudDatabase
publicDatabase.deleteRecordWithID(CKRecordID(recordName: "aaaa"), completionHandler: {recordID, error in
if error == nil {
} else {
println("\(error.localizedDescription)")
}
})
}
Mam radared się rdar błędu: // 18810914 –