我想要的:
我希望我的iOS应用程序在添加CloudKit记录后执行一项操作。
我做了什么:
我遵循Apple的info进行此操作。
问题:
从未调用application:didReceiveRemoteNotification
。
我试图解决的问题:
我已经成功设置了一个订阅,以便在添加CloudKit记录时得到通知。我用application:didRegisterForRemoteNotificationsWithDeviceToken
确认了这一点。
我还确认该记录确实已创建。
我可以使用CKQueryOperation
来获取记录。
我也尝试过使用application:didReceiveRemoteNotification:fetchCompletionHandler
,但是也没有调用此方法。
我搜索了Apple Developer Forums和StackOverflow,但没有找到解决我问题的方法。
我能做什么?
创建订阅的代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"command" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey = @"New command.";
notificationInfo.shouldBadge = YES;
subscription.notificationInfo = notificationInfo;
[VMKGlobalVariables.GLOBAL_appDelegate.privateDatabase saveSubscription:subscription
completionHandler:^(CKSubscription *subscription, NSError *error) {
if (error)
{
// insert error handling
}
else
{
DDLogVerbose(@"Added command subscription successfully.");
}
}
];
最佳答案
您是否已向该行注册应用程序委托。
application.registerForRemoteNotifications()
您的应用程序委托中是否有类似以下的代码?
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
let notification = CKQueryNotification(fromRemoteNotificationDictionary: userInfo as! [String : NSObject])
let container = CKContainer(identifier: "iCloud.blah.com")
let publicDB = container.publicCloudDatabase
if notification.notificationType == .Query {
let queryNotification = notification as! CKQueryNotification
if queryNotification.queryNotificationReason == .RecordUpdated {
print("queryNotification.recordID \(queryNotification.recordID)")
}
}
}