CloudKit を使用する小さなアプリを作成しています。何らかの理由で、クエリに一致する新しいレコードがある場合、アプリは通知を受け取りません。この機能を動作させることができた人はいますか?
アプリだけでなく、CloudKit ダッシュボードでも新しいレコードを作成します。レコードは非常に単純で、単一の整数フィールドがあります。
レコードを作成します。
CKRecord *record = [[CKRecord alloc] initWithRecordType:kSISCloudKitRecordTypeTest];
record[@"value"] = @1;
[self.publicDatabase saveRecord:record completionHandler:^(CKRecord *record, NSError *error)
{
// this call succeeds, no error.
}];
通知登録:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application registerForRemoteNotifications];
}
サブスクリプションを作成します。
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.
}
上記のコードを実行し、ダッシュボードで新しいレコードを作成した後、このアプリ デリゲート メソッドが呼び出されることを期待しています。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
CKNotification *cloudKitNotification = [CKNotification notificationFromRemoteNotificationDictionary:userInfo];
NSLog(@"cloudKitNotification: %@", cloudKitNotification);
}
ただし、呼び出されることはありません。