iCloud之订阅记录更改

来源:互联网 发布:专辑封面设计软件 编辑:程序博客网 时间:2024/05/02 06:13

Subscribing to Record Changes

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

Save Subscriptions to the Database

订阅保存到数据库

在你的代码中,创建指定记录类型,谓语和类型要被通知更改的认购对象。然后保存订阅对象到数据库。


创建并保存认购

1.创建谓词对象。
例如,从一个艺术家(如在艺术品记录类型的艺术家字段是引用类型)订阅艺术品。
CKRecordID *artistRecordID = [[CKRecordID alloc] initWithRecordName:@"Mei Chen"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"artist = %@", artistRecordID];
注:在谓语格式字符串参数右边的表达可能的值包括CKRecord,CKRecordID和CKReference对象。如果您知道记录名称,您可以创建一个包含只记录名称记录ID。
2.创建一个预订指定的记录类型,谓语和通知选项。
CKSubscription *subscription = [[CKSubscription alloc]
                                    initWithRecordType:@"Artwork"
                                    predicate:predicate
                                    options:CKSubscriptionOptionsFiresOnRecordCreation];
options参数的可能值是: CKSubscriptionOptionsFiresOnRecordCreationCKSubscriptionOptionsFiresOnRecordDeletionCKSubscriptionOptionsFiresOnRecordUpdate, 和 CKSubscriptionOptionsFiresOnce.因为options参数是一个位掩码,可以订阅的改变的类型的任何组合。例如,您可以通过CKSubscriptionOptionsFiresOnRecordCreation| CKSubscriptionOptionsFiresOnRecordUpdate作为选项:参数来接收所有新数据的通知。

3.创建CloudKit通知对象。
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey = @"New artwork by your favorite artist.";
notificationInfo.shouldBadge = YES;
要显示的本地化字符串给用户,设置通知的alertLocalizationKey属性(不是alertBody属性)。

4.订阅的通知对象设置为新的CloudKit通知对象。
subscription.notificationInfo = notificationInfo;
5.保存的预订数据库。
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
    [publicDatabase saveSubscription:subscription
                    completionHandler:^(CKSubscription *subscription, NSError *error) {
                        if (error)
                            // insert error handling
                    }
     ];
在Xcode中,运行您的应用程序订阅保存到数据库中。


Verify Your Steps


验证订阅保存到架构。在CloudKit仪表盘,认购对象显示为模式的订阅类型。


1.在 CloudKit Dashboard,选择在左上角使用您的应用程序从弹出菜单中的容器。
2.在架构上,单击订阅类型。
订阅出现在第二列中。
3.如果有必要,选择预订。
订阅属性出现在细节方面。
../Art/7_verify_subscriptions_2x.png

Register for Push Notifications

注册推送通知

订阅保存到数据库不会自动配置您的应用程序接收通知时订阅火灾。CloudKit使用苹果推送通知服务( Apple Push Notification service (APNs))来发送订阅通知到您的应用程序,让您的应用程序需要注册推送通知接收他们。

对于iOS应用程序,该代码添加到 application:didFinishLaunchingWithOptions:协议方法注册推送通知:
// Register for push notifications
    UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert categories:nil];
    [application registerUserNotificationSettings:notificationSettings];
    [application registerForRemoteNotifications];
对于Mac应用程序,实现的applicationDidFinishLaunching:协议方法注册推送通知。


对于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];
}
5.更新观点或根据记录更改通知用户。

Test Subscriptions

测试订阅


您可以通过Xcode中运行你的应用程序,并使用CloudKit仪表板来创建,修改或删除记录,如 在Add, Modify, and Delete Records中所描述的。然后,通过在多台设备上运行你的应用程序全面测试订阅。使用一台设备进行更改与其他设备接收订阅通知。使用多个设备,因为一个不发送通知给发起所述通知相同的设备。


对于iOS系统中,使用iOS设备(而不是iPhone模拟器)来测试订阅通知。您的应用程序成功地注册了推送通知,如果有要求用户的同意您的应用程序一个对话框来接收通知。


概括

在本章中,您学习了如何:

1.订阅记录更改使用谓词
2.处理订阅通知











































0 0
原创粉丝点击