订阅记录变更
Last updated
Was this helpful?
Last updated
Was this helpful?
当结果与上一个查询大致相同时,您的应用重复查询效率很低。更高效的方法是订阅记录更改,让服务器在后台运行查询。服务器将通知您的应用程序对用户或应用程序感兴趣的更改。例如,如果您的应用的一个用户对某位艺术家的作品感兴趣,则可以在上传该艺术家的新作品时通知您的应用。
在您的代码中,创建一个订阅对象,指定要通知的记录类型、谓词和更改类型。然后将订阅对象保存到数据库。
创建和保存订阅
创建谓词对象。例如,订阅艺术家的艺术作品(其中记录类型中的artist
字段Artwork
是一种Reference
类型)。
创建指定记录类型、谓词和通知选项的订阅。
创建CloudKit通知对象。
要向用户显示本地化字符串,请设置通知的alertLocalizationKey
属性(而不是alertBody
属性)。
将订阅的通知对象设置为新的CloudKit通知对象。
将订阅保存到数据库。
在Xcode中,运行您的应用程序以保存对数据库的订阅。
注意: 您无需在开发者帐户中为应用的显式应用ID启用推送通知即可接收订阅通知。启用CloudKit时,Xcode会自动将APN权利添加到您的权利文件中。
获取通知的正文。
更新视图或根据记录更改通知用户。
对于iOS和tvOS,请使用连接到Mac(不是模拟器)的设备来测试订阅通知。如果某个对话框询问用户是否允许您的应用接收通知,则您的应用会成功注册推送通知。
在本章中,您学习了如何:
使用谓词订阅记录更改
处理订阅通知
注: 在谓语格式字符串参数右边的表达可能的值、
以及对象。如果您知道记录名称,则可以创建仅包含记录名称的记录ID。
对于可能的值options
参数有:,,,和。由于options
参数是位掩码,因此您可以订阅更改类型的任意组合。例如,你可以传递CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate
的options:
参数来接收所有新数据的通知。
保存订阅数据库不会自动将应用程序配置为在订阅触发时接收通知。CloudKit使用向您的应用发送订阅通知,因此您的应用需要注册推送通知以接收它们。
对于iOS和tvOS应用程序,将此代码添加到协议方法以注册推送通知:
对于Mac应用程序,请实施协议方法以注册推送通知。
(可选)实现和方法,以便在应用程序成功或不成功注册推送通知时采取适当的操作。
接下来,实现该方法在到达时处理订阅通知。对于iOS和tvOS应用程序,实现协议方法,对于Mac应用程序,实现协议方法。例如,实现此方法可在创建,更新或删除与谓词匹配的记录时更新视图。
将协议方法添加到应用程序的委托。
在该方法中,将userInfo
参数转换为对象。
从对象获取新记录或修改记录。
您最初可以通过Xcode运行应用程序并使用CloudKit Dashboard创建,修改或删除记录来测试订阅,如。然后通过在多个设备上运行您的应用程序来完全测试订阅。使用一个设备进行更改,使用另一个设备接收订阅通知。您使用多个设备,因为通知不会发送到发起通知的同一设备。