Как мне использовать 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 запросов / сек).

Я пробовал как на физическом устройстве, так и в симуляторе.

0 ответов

Другие вопросы по тегам