Subscribing to Record Changes
这是低效率的为您的应用程序重复查询时,结果大都是一样的最后一个查询。相反,订阅记录的变化,让服务器在后台运行查询。服务器会通知你他们感兴趣的用户或应用程序更改应用程序。例如,如果你的应用程序中的一个用户被某个艺术家感兴趣的作品,你的应用程序时,可以通知新的作品由艺术家上传。

Save Subscriptions to the Database
订阅保存到数据库
在你的代码中,创建指定记录类型,谓语和类型要被通知更改的认购对象。然后保存订阅对象到数据库。
创建并保存认购
1.创建谓词对象。
例如,从一个艺术家(如在艺术品记录类型的艺术家字段是引用类型)订阅艺术品。
创建并保存认购
1.创建谓词对象。
例如,从一个艺术家(如在艺术品记录类型的艺术家字段是引用类型)订阅艺术品。
CKRecordID *artistRecordID = [[CKRecordID alloc] initWithRecordName:@"Mei Chen"]; |
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"artist = %@", artistRecordID]; |
2.创建一个预订指定的记录类型,谓语和通知选项。
CKSubscription *subscription = [[CKSubscription alloc] |
initWithRecordType:@"Artwork" |
predicate:predicate |
options:CKSubscriptionOptionsFiresOnRecordCreation]; |
CKSubscriptionOptionsFiresOnRecordCreation
,
CKSubscriptionOptionsFiresOnRecordDeletion
,
CKSubscriptionOptionsFiresOnRecordUpdate
, 和
CKSubscriptionOptionsFiresOnce
.因为options参数是一个位掩码,可以订阅的改变的类型的任何组合。例如,您可以通过CKSubscriptionOptionsFiresOnRecordCreation| CKSubscriptionOptionsFiresOnRecordUpdate作为选项:参数来接收所有新数据的通知。
3.创建CloudKit通知对象。
CKNotificationInfo *notificationInfo = [CKNotificationInfo new]; |
notificationInfo.alertLocalizationKey = @"New artwork by your favorite artist."; |
notificationInfo.shouldBadge = YES; |
4.订阅的通知对象设置为新的CloudKit通知对象。
subscription.notificationInfo = notificationInfo;5.保存的预订数据库。
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase]; |
[publicDatabase saveSubscription:subscription |
completionHandler:^(CKSubscription *subscription, NSError *error) { |
if (error) |
// insert error handling |
} |
]; |
Verify Your Steps
验证订阅保存到架构。在CloudKit仪表盘,认购对象显示为模式的订阅类型。
1.在 CloudKit Dashboard,选择在左上角使用您的应用程序从弹出菜单中的容器。
2.在架构上,单击订阅类型。
订阅出现在第二列中。
3.如果有必要,选择预订。
订阅属性出现在细节方面。

Register for Push Notifications
注册推送通知
订阅保存到数据库不会自动配置您的应用程序接收通知时订阅火灾。CloudKit使用苹果推送通知服务(
Apple Push Notification service (APNs))来发送订阅通知到您的应用程序,让您的应用程序需要注册推送通知接收他们。
// Register for push notifications |
UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert categories:nil]; |
[application registerUserNotificationSettings:notificationSettings]; |
[application registerForRemoteNotifications]; |
对于iOS和Mac应用程序,选择实现
application:didRegisterForRemoteNotificationsWithDeviceToken:
和
application:didFailToRegisterForRemoteNotificationsWithError:
方法采取适当的行动,当应用程序成功或失败注册了推送通知。
注意:您不需要启用应用程序的明确的App ID在会员中心推送通知接收订阅通知。当您启用CloudKit Xcode中自动添加的APN享有的授权文件。
Handle Push Notifications in Code
其次,实现application:didReceiveRemoteNotification:
方法来处理订阅通知,当他们到达。对于iOS应用程序,实现了
UIApplicationDelegate
协议方法和Mac应用程序,实现NSApplicationDelegate协议方法。例如,实现此方法时创建匹配的记录您的谓词,更新或删除更新的意见。
1.添加
application:didReceiveRemoteNotification:
协议的方法来应用程序的委托。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { |
} |
2.在
application:didReceiveRemoteNotification:
方法,转换用户信息参数aCKNotification对象。
CKNotification *cloudKitNotification = [CKNotification notificationFromRemoteNotificationDictionary:userInfo];3.得到通知的主体。
NSString *alertBody = cloudKitNotification.alertBody;4. 获得从CKQueryNotification对象的新的或修改的记录。
if (cloudKitNotification.notificationType == CKNotificationTypeQuery) { |
CKRecordID *recordID = [(CKQueryNotification *)cloudKitNotification recordID]; |
} |
Test Subscriptions
测试订阅
您可以通过Xcode中运行你的应用程序,并使用CloudKit仪表板来创建,修改或删除记录,如
在
Add, Modify, and Delete Records
中所描述的。然后,通过在多台设备上运行你的应用程序全面测试订阅。使用一台设备进行更改与其他设备接收订阅通知。使用多个设备,因为一个不发送通知给发起所述通知相同的设备。
对于iOS系统中,使用iOS设备(而不是iPhone模拟器)来测试订阅通知。您的应用程序成功地注册了推送通知,如果有要求用户的同意您的应用程序一个对话框来接收通知。
对于iOS系统中,使用iOS设备(而不是iPhone模拟器)来测试订阅通知。您的应用程序成功地注册了推送通知,如果有要求用户的同意您的应用程序一个对话框来接收通知。
概括
在本章中,您学习了如何:
1.订阅记录更改使用谓词
2.处理订阅通知
在本章中,您学习了如何:
1.订阅记录更改使用谓词
2.处理订阅通知