Подписки CloudKit в частной базе данных

У меня есть приложение, для которого я хочу добавить возможность резервного копирования данных в iCloud с помощью CloudKit. «Резервное копирование», похоже, работает правильно (мои записи находятся в частной базе данных, поскольку они ... ну, частные).

Теперь я хотел бы использовать CKSubscriptions, чтобы все мои устройства синхронизировались с одними и теми же данными. Я попытался реализовать CKSubscription для отслеживания создания / обновления / удаления записей на основе запроса (а не на основе зон).

func subscribe() {

  let options = CKSubscriptionOptions.FiresOnRecordCreation |
  CKSubscriptionOptions.FiresOnRecordDeletion |
  CKSubscriptionOptions.FiresOnRecordUpdate


  let predicate = NSPredicate(value: true) // get all the records for a given type
  let subscription = CKSubscription(recordType: "Stocks",
  predicate: predicate, subscriptionID: subscriptionID,
  options: options)

  subscription.notificationInfo = CKNotificationInfo()
  subscription.notificationInfo.alertBody = ""

  db.saveSubscription(subscription, completionHandler: {
  subscription, error in
    if (error != nil) {
      println("error subscribing: \(error)")
    } else {
      println("subscribed!")
    }
  })
}

До сих пор мне не удавалось отправить уведомление на свое устройство.

Я знаю, что вы можете создать подписку по зонам. Зоны находятся в частной БД, поэтому я предполагаю, что подписки CKS могут работать в частной БД. Но я не хотел реализовывать зоны (в противном случае они мне не нужны).

Вопрос: есть ли проблема с CKSubscriptions в частной БД на основе запроса?


person Frédéric Adda    schedule 19.05.2015    source источник
comment
Обновите мой вопрос: если в моих вариантах у меня есть только CKSubscriptionOptions.FiresOnRecordCreation, он работает. Но если я поставлю другой вариант или комбинацию вариантов, то это больше не работает. Сообщили об ошибке, и служба поддержки DTS запросила, на данный момент безрезультатно.   -  person Frédéric Adda    schedule 22.06.2015


Ответы (1)


Это должно сработать. Подписки вне зоны (подписки на основе запросов) поддерживаются в частных базах данных. Вы добавили код для получения уведомлений в свой AppDelegate?

person harryhorn    schedule 20.05.2015
comment
Да. Я добавил функции didRegisterForRemoteNotificationsWithDeviceToken, didFailToRegisterForRemoteNotificationsWithError и didReceiveRemoteNotification. Я также активировал удаленные уведомления в возможностях фоновых режимов моей цели. - person Frédéric Adda; 20.05.2015