warriors tutorial ios ios8 cloudkit cksubscription

ios - tutorial - cloudkit warriors



No recibiendo notificaciones push de CloudKit (1)

Ahora recibo las notificaciones desde Beta 3:

{ aps = { }; ck = { ce = 2; cid = "iCloud.com.domain.App"; nid = "0b3ae470-d2c0-4f35-a817-12a899ee5964"; qry = { dbs = 2; fo = 1; rid = 88aee11ca88d4ecc45bf57c898b360c8e7e3d8bb; zid = "_defaultZone"; zoid = "_defaultOwner"; }; }; }

Además, hay una propiedad shouldSendContentAvailable en CKNotificationInfo que hace posible recibir las notificaciones en segundo plano, que también parece funcionar ahora (a partir de Beta 4).

Estoy escribiendo una pequeña aplicación que usa CloudKit. Por algún motivo, la aplicación no recibe ninguna notificación cuando hay un nuevo registro que coincide con la consulta. ¿Alguien ha podido hacer funcionar esta función?

Creé nuevos registros en la aplicación, pero también en el panel de CloudKit. El registro es muy simple, con un solo campo entero.

Crea un registro:

CKRecord *record = [[CKRecord alloc] initWithRecordType:kSISCloudKitRecordTypeTest]; record[@"value"] = @1; [self.publicDatabase saveRecord:record completionHandler:^(CKRecord *record, NSError *error) { // this call succeeds, no error. }];

Registrarse para notificaciones:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application registerForRemoteNotifications]; }

Crear una suscripción:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value = 1"]; CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:kSISCloudKitRecordTypeTest predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation]; CKNotificationInfo *notificationInfo = [CKNotificationInfo new]; notificationInfo.alertLocalizationKey = @"LOCAL_NOTIFICATION_KEY"; notificationInfo.soundName = @"Party.aiff"; notificationInfo.shouldBadge = YES; subscription.notificationInfo = notificationInfo; [self.publicDatabase saveSubscription:subscription completionHandler:^(CKSubscription *subscription, NSError *error) { // this succeeds as well, at least the 1st time I run it. // on subsequent calls it returns an error "duplicate subscription", which is OK by me. }

Después de ejecutar el código anterior y crear un nuevo registro en el panel, espero que se llame al método delegado de la aplicación:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { CKNotification *cloudKitNotification = [CKNotification notificationFromRemoteNotificationDictionary:userInfo]; NSLog(@"cloudKitNotification: %@", cloudKitNotification); }

Sin embargo, nunca se llama.