根据CloudKit概述:
CloudKit还允许您的用户使用他们的iCloud Apple ID匿名登录您的应用,而无需共享他们的个人信息.
我在他们的文档中找不到关于此功能的任何其他内容.我已经有了一个带有我自己后端的应用程序,因此我不需要任何CloudKit提供的后端即服务功能,但我想利用用户登录iCloud帐户,与我们目前使用Facebook和Twitter的方式大致相同.
是否可以使用CloudKit,或者您是否还必须利用其BAAS功能才能利用登录?
我已经制作了一个与CloudKit数据库交互的简单应用程序.基本上它只是一个日期选择器和两个按钮,第一个添加带有设置时间的新记录到数据库,第二个检索所有记录.除了所有操作都非常慢之外,这似乎工作正常.从saveRecord和performQuery获取响应大约需要10秒钟.我究竟做错了什么?以下是检索记录的代码.
@IBAction func retreiveButtonClick(sender: AnyObject) {
self.labelOutlet.text = "Waiting..."
func myHandler(results:[AnyObject]!, error:NSError!) {
if let err = error {
println("err: \(err.localizedDescription)")
} else {
self.labelOutlet.text = "Got \(results.count) results:"
for record in results {
let time = record.objectForKey("testTime") as NSDate
self.labelOutlet.text = self.labelOutlet.text + "\n\(time.description)"
}
}
}
var query = CKQuery(recordType:"TestTable", predicate:NSPredicate(value:true))
cloudDatabase.performQuery(query, inZoneWithID: nil, myHandler)
}
Run Code Online (Sandbox Code Playgroud)
我正在我的iPhone 5上测试它,它连接到本地WiFi.我注意到保存的记录在调用完成处理程序之前很久就出现在CloudKit Dashboard中(我有足够的时间来检查),所以我怀疑我在代码中做错了.
我可能会遗漏一些明显的东西.
如何创建一个CloudKit通知,其中包含有关您收到通知的CKRecord的详细信息?(即不仅仅是一个通用的"New Item Created!",而是一个带有记录标题的通知,例如"Jill and Jessica的生日派对!")
是否有正确的方法来为每个新记录更改创建一个带有新notification.alertBody的新订阅?这没有任何意义.
这会留下选项queryNotification.recordID从CloudKit(或我的本地商店)中提取数据并以某种方式将其添加到通知中?添加或更改已通知通知值的方法是什么?我错过了什么?
更新:Per Edwin的建议在这里是一个代码片段,但它不起作用.
let notification = CKNotificationInfo()
notification.alertBody = "Added: %@" as NSString
notification.alertLocalizationArgs = ["name"]
Run Code Online (Sandbox Code Playgroud) 我已经设置了自定义区域订阅,以从我的自定义记录区域接收(静默)推送通知.我的iOS设备上的一切正常,但我无法在Mac上收到通知.
要注册通知我正在注册通知类型applicationDidFinishLaunching:
[[NSApplication sharedApplication] registerForRemoteNotificationTypes:NSRemoteNotificationTypeNone];
Run Code Online (Sandbox Code Playgroud)
(尝试使用相同结果的其他类型)
application:didRegisterForRemoteNotificationsWithDeviceToken:
Run Code Online (Sandbox Code Playgroud)
然后使用有效令牌调用.一切似乎都很好但是当自定义区域注册更改时,我没有收到任何通知
application:didReceiveRemoteNotification:
Run Code Online (Sandbox Code Playgroud)
不叫.我还尝试将警报正文设置为一个空字符串,如下所示:
CKNotificationInfo *info = [[CKNotificationInfo alloc] init];
info.alertBody = @"";
info.shouldSendContentAvailable = YES;
Run Code Online (Sandbox Code Playgroud)
但它也没有用.当我将一个字符串设置为警报正文(并注册相应的通知类型)时,我还会在右上角收到该正文的通知,但是不会调用application:didReceiveRemoteNotification:.
希望您能够帮助我.谢谢!
我正在使用CloudKit来获取/存储数据,但也希望有一个本地持久层.CloudKit是否提供任何类型的本地存储功能?或者我应该使用NSUserDefaults(NSKeyedArchiver/NSKeyedUnarchiver)?
我一直在摆弄CloudKit一段时间了,但我找不到如何使用CKRecordZone的真实例子.我理解他们的能力(即分组记录,尤其是订阅记录),但是有人真的有使用它们的经验,并映射哪个概念?
谢谢
我正在尝试使用CloudKit从公共数据库中读取数据.
let publicDB = CKContainer.defaultContainer().publicCloudDatabase
let query = ...
publicDB.performQuery(query, inZoneWithID: nil) { results, error in
// "Internal Error" (1/1000); "Received a didCompleteWithError without receiving a response from the server">)
}
Run Code Online (Sandbox Code Playgroud)
但是,一旦我登录iCloud,我就会按预期恢复数据.根据文档,人们应该能够在不登录的情况下访问公共数据库相关记录,对吗?
需要注意的一点是,我正在使用模拟器.
是否有人有使用经验的CloudKit选项DeleteSelf了CKReference?这是我从文档中得到的:
DeleteSelf
引用记录的删除操作.删除记录还会删除包含指向该记录的CKReference对象的所有记录.删除附加记录可能会触发更多记录的级联删除.删除在默认区域中是异步的,在自定义区域中是立即的.
所以我一直在测试这个,我创建了多个CKReference对象,使用CloudKit Dashboard和使用我的应用程序.每当我使用我的应用程序执行此操作时,我都会像这样创建引用:
let reference:CKReference = CKReference(recordID: savedFriend.friendID, action: CKReferenceAction.DeleteSelf)
Run Code Online (Sandbox Code Playgroud)
我必须做错事,因为无论何时我去手动删除使用仪表板引用的记录,或者设置我的应用程序以编程方式删除它,记录都会消失,但引用永远不会被删除.我想也许我应该等待,它最终会发生,但几小时后它仍然在那里检查,就像它本应该删除自己.这有点令人沮丧,因为我设计了一些我的代码,假设这可以工作,现在我可以有一个浪费资源的应用程序试图找到一个CKRecord不再存在的.我应该不依靠这个来工作吗?我感谢任何帮助或建议.
更新〜04/07/2016
我跳了回来,并发布了一个更新,问题已经解决了.我并不完全相信这个问题不会重新出现,所以我昨晚寻求一些保证.我创建了5个不同的,CKRecords并创建了各种不同的CKReference对象,以便在我的数 然后我继续为CKReferenceAction.DeleteSelf每个引用设置选项(我通过仪表板手动尝试了两个,其他三个以编程方式完成).无论如何,我等了几分钟然后删除了引用的记录......十分钟后,引用仍然存在.我又等了5-10分钟,他们还在那里,所以我上床睡觉,假设早上他们肯定要走了,对吧?错误!12个小时后,CKReference条目仍在那里,引用的记录仍然没有.我肯定是在挠头,似乎这是一个错误CloudKit.我应该提一下,我也注意到我的仪表板中有一些奇怪的行为.在过去的四天左右,在左下角,它一直表示它是"重新索引开发数据",这里是一张图片,例如:

这会导致这个问题吗?有人熟悉这个问题并知道解决这个问题的方法吗?任何建议,将不胜感激.我已经向Apple提交了一份错误报告.
我正在与cloudkit仪表板交互并查看我的应用程序收集的数据.
如何从仪表板(data-> csv或json)导出所有数据,以便我可以对其进行一些分析?
谢谢!
今年推出了CloudKit共享,我正在努力实现它.
我正在使用UICloudSharingController和我在成功处理程序中保存共享及其根记录.但是,当我共享链接(例如通过iMessage)并在另一台设备(不同的iCloud帐户,相同版本)上打开它时,它会显示以下错误:
无法打开"分享"
您需要更新版本
APPNAME来打开它,但在App Store中找不到所需的版本.如果您不确定要使用哪个版本,请与所有者联系.
由于这是一个新的应用程序,它当然不在App Store中.我需要先测试共享(Chicken或egg?),所以任何人都知道如何测试CloudKit共享?