Данные CloudKit не обновляются на втором устройстве только в симуляторе и первом устройстве - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь сохранить данные из CloudKit в формате c на нескольких устройствах. С помощью следующего кода я могу успешно добавлять, загружать и получать уведомления, когда запись была изменена в CloudKit, моя проблема заключается в том, что это работает, только когда я использую симулятор для изменения данных и физическое устройство для просмотра уведомлений .

Вот как я это использую.

  1. Я установил приложение в симуляторе и в iPhone.

  2. Из симулятора I go и введите новый примечание / запись, и я получаю уведомление в iPhone, что я и хочу. Я также могу вводить записи непосредственно из CloudKit dashboard, а также получать уведомления в iPhone.

  3. Третий шаг, и что не работает, так это ... Я пошел iPhone моей жены, установил приложение из XCode и вошел в iTunes & App Store с той же учетной записью, которую я использовал в симуляторе и на первом устройстве, где обновляются данные, затем я пошел и ввел данные в симуляторе и на сначала iPhone но я не получаю никаких уведомлений в iPhone моей жены. Я попытался ввести данные непосредственно в iPhone моей жены, и кажется, что данные сохраняются, поскольку я могу выйти из приложения, и данные не теряются. Итак, я получаю совершенно разные данные в обоих телефонах, в iPhone моей жены я вижу только то, что было введено непосредственно в этом телефоне, и в моем первом телефоне я вижу то, что было введено прямо там, в симуляторе или в CloudKit приборная панель.

Я, вероятно, неправильно понимаю всю экосистему и то, как она работает. Я ожидал, что на каждом телефоне с установленным приложением и входом в него с одинаковыми iTunes & App Store учетными данными для входа будут видны обновления на всех устройствах.

В какой части я здесь недопонимаю?

Вот код:

Main ViewController

Добавление записей

public func saveNotestoCloud(){
    let privateDatabase = CKContainer.default().database(with: .private)
    if let title =  self.textfield.text, let body = textView.text, let record = self.note?.record{
        record["title"] = title
        record["note"] = body
        self.note?.record = record

        privateDatabase.save(record) { (record,error) in
            if let error = error{
                print("Error  \(error.localizedDescription)")
                return
            }
            print("Successfully saved record \(record?.recordID.recordName ?? "")")
        }
    }
}

Делегат приложения

Регистрация уведомлений

let privateDatabase = CKContainer.default().database(with: .private)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    self.createSubscriptions()

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granter, error) in
        guard error == nil else{
            print(error!)
            return
        }
    }
    application.registerForRemoteNotifications()
    return true
}

private func createSubscriptions(){

    let predicate = NSPredicate(value: true)
    let subscription = CKQuerySubscription(recordType: "Notes",
                                                       predicate: predicate,
                                                       subscriptionID: "SubscriptionID",
                                                       options: [CKQuerySubscription.Options.firesOnRecordCreation,  CKQuerySubscription.Options.firesOnRecordDeletion, CKQuerySubscription.Options.firesOnRecordUpdate])

    let notificationInfo = CKSubscription.NotificationInfo()
    notificationInfo.alertLocalizationKey = "New Note"
    notificationInfo.shouldBadge = true
    subscription.notificationInfo =  notificationInfo
    let privateData = CKContainer.default().database(with: .private)
    privateData.save(subscription){ result, error in
        if let error = error {
            print(error.localizedDescription)
        }
    }
}

1 Ответ

1 голос
/ 22 апреля 2020

Насколько я понимаю, CloudKit использует учетную запись, зарегистрированную в iCloud в настройках устройства, , а не учетную запись iTunes & App Store.

Если вы хотите, чтобы iPhone вашей жены видел те же данные CloudKit, вам придется выйти и снова войти, используя свой Apple ID в настройках iCloud.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...