Отсутствие push-уведомлений от подписок CloudKit

Я не получаю push-уведомления, которых ожидаю от CloudKit подписок.

Вот что я сделал до сих пор:

  • Включены возможности CloudKit и удаленных уведомлений.
  • Создал тестовый тип записи с помощью панели управления CloudKit.
  • Создал подписку для соответствующего типа записи (Test), которую я вижу на панели инструментов CloudKit.
  • Для проверки используйте физическое устройство, на котором выполнен вход в iCloud и которое подключено к Интернету.
  • Настройте делегата приложения для получения уведомлений.
  • Записи, вставленные / обновленные / удаленные вручную через портал CloudKit.

К сожалению, я никогда не получаю никаких push-уведомлений. Используемый код показан ниже. Буквально это единственный код в новом пустом проекте.

    // MARK: - SUBSCRIPTIONS
func subscribeToRecordChangesWithRecordType (recordType:String, database:CKDatabase) {

    let predicate = NSPredicate(value: true)
    let subscription = CKSubscription(recordType: recordType, predicate: predicate, options: CKSubscriptionOptions.FiresOnRecordCreation|CKSubscriptionOptions.FiresOnRecordDeletion|CKSubscriptionOptions.FiresOnRecordUpdate)

    database.saveSubscription(subscription, completionHandler: { (savedSubscription, error) -> Void in
        if let _error = error {
            NSLog("ERROR saving '%@' subscription %@",recordType, _error)
        } else {
            NSLog("SUCCESS creating '%@' subscription: %@", recordType, savedSubscription)
        }
    })
}
func createSubscriptions () {
    let privateDB = CKContainer.defaultContainer().privateCloudDatabase
    let publicDB = CKContainer.defaultContainer().publicCloudDatabase


    // NOTE: create a Record Type called 'Test' in the CloudKit dashboard
    self.subscribeToRecordChangesWithRecordType("Test", database: privateDB)
    self.subscribeToRecordChangesWithRecordType("Test", database: publicDB)
}

// MARK: - PUSH NOTIFICATIONS
func registerForPushNotifications (application: UIApplication) {
    self.createSubscriptions()
    let settings = UIUserNotificationSettings(forTypes: .Alert, categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    NSLog("Registered for Push Notifications with token: %@", deviceToken);
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    NSLog("FAILED to register for Push Notifications. %@", error)
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    NSLog("RECEIVED Push Notification")
    NSNotificationCenter.defaultCenter().postNotificationName("PushNotificationReceived", object: userInfo)
}
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
    NSLog("RECEIVED LOCAL Push Notification")
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    NSLog("RECEIVED Push Notification with fetchCompletionHandler")
    NSNotificationCenter.defaultCenter().postNotificationName("PushNotificationReceived", object: userInfo)
}

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    self.registerForPushNotifications(application)
    return true
}

Заранее благодарим за любые советы или предложения. Я надеюсь, что это не ошибка, и что я здесь что-то делаю не так ... это должно «просто работать»!

Ваше здоровье


person Timbo    schedule 12.03.2015    source источник
comment
Код выглядит нормально. Можете ли вы запросить вашу общедоступную базу данных для проверки типа записи? Можете ли вы показать нам, что выводят операторы NSLog? не могли бы вы попробовать выполнить registerForRemoteNotifications перед созданием подписок?   -  person Edwin Vermeer    schedule 18.03.2015
comment
Год, а теперь ответ :( У меня точно такая же проблема. Удивительно мало об этой теме в Интернете, кроме руководства, предоставленного Apple.   -  person BadPirate    schedule 02.08.2016
comment
В итоге я сам выполнял логику синхронизации. Посетите первую страницу timroadley dot com, чтобы загрузить код. Это проект ezcloudkit.zip   -  person Timbo    schedule 03.08.2016
comment
У меня такая же проблема - похоже, уведомления не приходят. Интересно, это ошибка или особенность?   -  person UKDataGeek    schedule 20.08.2016


Ответы (1)


Убедись

  1. Вы включили push-уведомление помимо CloudKit (и при необходимости в фоновом режиме) на вкладке «Возможности» приложения. И при необходимости найдите push-сертификаты (один для разработчиков, один для производства) на портале разработчиков, загрузите их и установите (двойным щелчком по ним);

  2. Вы тестируете приложение на устройстве. Apple не подталкивает к симулятору.

person CodeBrew    schedule 17.06.2017