我有一个 iOS 应用程序,它的大部分功能都依赖于 cloudkit。但是,我似乎能够进入用户部分登录的状态。基本的cloudkit登录检查通过,我可以获得我的recordID,但无法读取或写入记录,例如当我完全登录后就可以了。
完整详细信息如下 - 关于如何在不测试读取或写入的情况下识别此状态的任何想法?
启动手机后,我收到一条“更新 Apple ID 设置”提醒
"Some account services will not be available until you sign in again"
所以,这个问题显然与此相关(这似乎在模拟器中很常见......)。如果我进入设置并重新输入密码,一切都很好。我可以通过尝试读取或写入时的错误处理来处理这个问题,但我宁愿提前检查并适本地警告用户。
我今天如何检查:
启动时,我检查用户是否登录到 cloudkit:
if FileManager.default.ubiquityIdentityToken != nil {
print("User logged in") // IT PASSES IN THIS STATE
}
else {
print("User is not logged in")
}
到目前为止,一切都很好。测试通过,用户已登录。但是,当我去读取或写入时,很明显我没有登录。例如,在尝试写入时我会收到 CKErrorPermissionFailure。
附加说明 - 在当前,“部分”?登录状态下,以下内容返回我的用户的正确 recordID:
let container = CKContainer.default()
container.fetchUserRecordID() { recordID, error in
关于如何以编程方式识别 cloudkit 的部分状态有什么想法吗?谢谢!
最佳答案
我还没有找到解决这个问题的答案,但想记录两件可能有用的事情
当状态检查返回事件状态时,如果我随后尝试获取要求您登录 iCloud 的记录,则会失败,我可以利用该失败来确定注销状态。
我遇到的另一个问题是少数用户打开了 iCloud,但由于某种原因没有启用 iCloud Drive。您可以通过以下方法进行检查:
CKContainer.default().accountStatus { (accountstatus, error) in
switch accountstatus {
case .noAccount:
log.error("user logged out of iCloud OR iCloud Drive off")
case .restricted:
print("restricted")
case .available:
print("user logged into iCloud and iCloud drive")
case .couldNotDetermine:
log.warning("could not determine account status")
default:
log.error("New account status returned")
}
}
关于swift - 测试部分登录到cloudkit的帐户? "Update Apple ID Settings",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63490973/