Как мне использовать CKSubscription в расширении сообщений iOS 10?
iOS 10 представила расширения сообщений, которые являются первым (насколько мне известно) расширением, которое не требует хост-приложения. Я пытаюсь использовать CloudKit в расширении сообщений, которое не имеет хост-приложения.
Из того, что я могу сказать, CKSubscription
опирается на push-уведомления. Однако я не могу зарегистрироваться для push-уведомлений обычным способом (через UIApplication
) в расширениях приложения:
let app = UIApplication.shared // Error: not available here blah blah blah
Это означает, что на первый взгляд невозможно получить CKSubscription
уведомления в приложении сообщений. Я нашел надежду в новом UserNotifications.framework
, но он не предоставляет никаких механизмов для регистрации удаленных уведомлений. Я старался:
override func willBecomeActive(with conversation: MSConversation) {
// ...
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.badge, .alert]) { success, error in
if error != nil { fatalError() }
}
center.delegate = self
// ...
}
// MARK: UNUserNotificationCenterDelegate
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {
fatalError() // This never gets called :(
}
Но когда я обновляю записи, которые являются предметом моего CKSubscription
уведомление пользователю не предоставляется, а делегат не уведомляется.
Вот мой CKSubscription
код:
let sub = CKRecordZoneSubscription(zoneID: legitimateZone)
let notifInfo = CKNotificationInfo()
notifInfo.alertBody = "Wow it works! Amazing!"
sub.notificationInfo = notifInfo
privateDB.save(sub) { sub, error in
if let e = error {
fatalError("Error saving zone sub: \(e)")
}
print("Saved subscription")
}
Как я могу получить CKSubscription
уведомления в расширении сообщения?
Мне даже не нужны уведомления, представленные пользователю, и мне не нужно получать их в фоновом режиме. Все, что я хочу, - это знать, когда обновляются записи во время работы моего расширения.
Если есть другой способ сделать это, кроме CKSubscription
Я бы тоже хотел услышать (если он не будет постоянно опрашивать CloudKit, тратя впустую мои драгоценные 40 запросов / сек).
Я пробовал как на физическом устройстве, так и в симуляторе.