Проверьте, зарегистрирован ли пользователь в iCloud? Swift/IOS

Есть ли способ проверить и проверить, зарегистрирован ли пользователь в iCloud при открытии приложения? Я хочу иметь возможность направить их на страницу настроек, если они не вошли в систему, и если они вошли в iCloud и раньше использовали приложение - я хочу пропустить знак на странице....

Я заглянул в документацию Apple iCloud и Cloudkits, но не смог найти ничего, что могло бы помочь! Возможно ли это сделать?

Ответы

Ответ 1

Здесь вы идете - надеюсь, сам объяснительный. Подробнее см. В документах Apple для функции NSFileManager ниже.

func isICloudContainerAvailable()->Bool {
        if let currentToken = NSFileManager.defaultManager().ubiquityIdentityToken {
            return true
        }
        else {
            return false
        }
    }

Смотрите ниже: Непрозрачный токен, который представляет текущую идентификацию iCloud пользователей (только для чтения) Когда iCloud в настоящее время доступен, это свойство содержит непрозрачный объект, представляющий личность текущего пользователя. Если iCloud недоступен по какой-либо причине или нет зарегистрированного пользователя, значение этого свойства равно нулю.

Ответ 2

Если вы просто хотите узнать, вошел ли пользователь в iCloud, можно использовать синхронный метод:

if FileManager.default.ubiquityIdentityToken != nil {
    print("iCloud Available")
} else {
    print("iCloud Unavailable")
}

Однако, если вы хотите узнать, почему iCloud недоступен, вы можете использовать асинхронный метод:

CKContainer.default().accountStatus { (accountStatus, error) in
    switch accountStatus {
    case .available:
        print("iCloud Available")
    case .noAccount:
        print("No iCloud account")
    case .restricted:
        print("iCloud restricted")
    case .couldNotDetermine:
        print("Unable to determine iCloud status")
    }
}

Если вы хотите использовать асинхронный метод, но не заботитесь о том, почему, вам следует проверить, что accountStatus available, а не проверять, что это не noAccount:

CKContainer.default().accountStatus { (accountStatus, error) in
    if case .available = accountStatus {
        print("iCloud Available")
    } else {
        print("iCloud Unavailable")
    }
}

Ответ 3

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

        CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStat, error) in
          if (accountStat == .Available) {
              print("iCloud is available")
          }
          else {
              print("iCloud is not available")
          }
        }

Ответ 4

просмотрел документацию Apple iCloud и Cloudkits, но не смог найти ничего полезного! Это вообще возможно сделать?