Проверьте, зарегистрирован ли пользователь в 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, но не смог найти ничего полезного! Это вообще возможно сделать?