Как определить, что приложение iOS было запущено впервые указанным пользователем c (не указанным на устройстве c)? - PullRequest
0 голосов
/ 07 февраля 2020

Я использую в своем приложении cloudKit + Базовые данные в моем приложении (iOS 13+) (swift).

Я не могу понять, как обнаружить самый первый запуск приложения независимо от устройства для инициализации некоторых данных по умолчанию.

Существует много сообщений о том, как обнаружить первый запуск iOS приложения на указанном c устройстве - это просто. Я не могу найти решение для обнаружения первого запуска приложения для определенного пользователя c или другими словами - если в iCloud пользователя существует инициализированный контейнер с указанным c containerIdentifier.

Если пользователь уже использовал приложение на другом устройстве ранее, поэтому при первом запуске на новом устройстве будет синхронизироваться c с iCloud, и приложение будет использовать данные пользователя. Но если пользователь никогда не использовал приложение раньше, мне нужно инициализировать некоторые данные.

Я ищу подсказку, как с этим бороться часами, не могу найти ничего релевантного. Есть идеи?

Спасибо за помощь заранее.

1 Ответ

0 голосов
/ 03 марта 2020

Немного больше информации о вашей схеме cloudkit может помочь, но, если вы используете publicDB для хранения информации, для пользователя будет создана уникальная запись, когда он впервые выполнит действие, которое сохраняет данные в cloudkit.

Таким образом, вы можете проверить и посмотреть метку времени createDate объекта User в cloudkit и сравнить с текущим временем (немного неуклюже, но возможно). enter image description here

Пример кода для извлечения пользователя:

iCloudUserIDAsync { (recordID: CKRecord.ID?, error: NSError?) in
    if let userID = recordID?.recordName {
        self.loggedInUserID = userID

        self.loggedInWithiCloud = true
    } else {
        self.loggedInWithiCloud = false

        print("Fetched iCloudID was nil")
    }
}

В качестве альтернативы и более элегантно, вы можете записать логический флаг в пользовательский объект CloudKit (или локально в CoreData) при первом запуске. Затем при любом запуске получите весь пользовательский объект для вошедшего в систему пользователя iCloud, затем вы можете инициализировать его, а затем действовать оттуда к своей логической переменной.

Пример кода для получения полного пользователя и его локальной инициализации:

    CKContainer.default().publicCloudDatabase.fetch(withRecordID: userRecordID) { (results, error ) in
        if results != nil {
          //now that you have the user, you can perform your checks
            self.currentUser = MyUser(record: results!)
        }
        if let error = error {
            print("couldn't set user reference")
        }
        DispatchQueue.main.async {
            completion(nil)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...