我试图在多个设备中保持来自CloudKit的数据同步。使用下面的代码,我可以在CloudKit中修改记录时成功地添加、加载和获取通知,我的问题是,只有在使用模拟器修改数据和使用物理设备查看通知时,这才有效。
我就是这么用它的。
CloudKit dashboard输入记录,我还可以在iPhone.iTunes & App Store上,然后我去在模拟器和第一个iPhone中输入数据,但是我在妻子的iPhone中没有收到任何通知。我试着在我妻子的iPhone中直接输入数据,因为我可以退出应用程序,数据也不会丢失,所以数据似乎会持久化。所以,我在两部手机中得到了完全不同的数据,在我妻子的iPhone中,我只看到了在手机中直接输入的内容,在我的第一部手机中,我看到了在那里直接输入的内容,在模拟器中或者在CloudKit仪表板中。我可能误解了整个生态系统以及它是如何运作的。我所期待的是,每一部安装了应用程序并使用相同iTunes & App Store登录凭据登录的手机都会看到所有设备中的更新。
我在这里误解了什么?
以下是守则:
主ViewController
添加记录
public func saveNotestoCloud(){
let privateDatabase = CKContainer.default().database(with: .private)
if let title = self.textfield.text, let body = textView.text, let record = self.note?.record{
record["title"] = title
record["note"] = body
self.note?.record = record
privateDatabase.save(record) { (record,error) in
if let error = error{
print("Error \(error.localizedDescription)")
return
}
print("Successfully saved record \(record?.recordID.recordName ?? "")")
}
}
}应用程序代表
注册通知
let privateDatabase = CKContainer.default().database(with: .private)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.createSubscriptions()
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granter, error) in
guard error == nil else{
print(error!)
return
}
}
application.registerForRemoteNotifications()
return true
}
private func createSubscriptions(){
let predicate = NSPredicate(value: true)
let subscription = CKQuerySubscription(recordType: "Notes",
predicate: predicate,
subscriptionID: "SubscriptionID",
options: [CKQuerySubscription.Options.firesOnRecordCreation, CKQuerySubscription.Options.firesOnRecordDeletion, CKQuerySubscription.Options.firesOnRecordUpdate])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.alertLocalizationKey = "New Note"
notificationInfo.shouldBadge = true
subscription.notificationInfo = notificationInfo
let privateData = CKContainer.default().database(with: .private)
privateData.save(subscription){ result, error in
if let error = error {
print(error.localizedDescription)
}
}
}发布于 2020-04-22 20:50:35
据我所知,CloudKit依赖于设备设置中在iCloud下登录的帐户,而不是 iTunes & App帐户。
如果你想让你妻子的iPhone看到相同的CloudKit数据,你必须注销,并在iCloud设置中用你的苹果ID登录。
https://stackoverflow.com/questions/61372007
复制相似问题