CKContainer.discoverAllIdentities我的CloudKit应用程序中的请求总是失败.它在几天的过程中不断失败.
失败的代码的简化版本(导致相同的错误)是:
private func getContacts(completion: (([CKUserIdentity]?) -> Void)?) {
container.status(forApplicationPermission: .userDiscoverability) { [weak self] status, error in
if let error = error {
print(error)
}
switch status {
case .granted:
self?.discover(completion: completion)
default:
print("status not granted")
}
}
}
private func discover(completion: (([CKUserIdentity]?) -> Void)?) {
let op = CKDiscoverAllUserIdentitiesOperation()
op.qualityOfService = .userInitiated
op.discoverAllUserIdentitiesCompletionBlock = { error in
if let error = error {
print(error)
}
}
op.userIdentityDiscoveredBlock = { identity in
print(identity)
}
op.start()
}
Run Code Online (Sandbox Code Playgroud)
它会导致错误传递给op.discoverAllUserIdentitiesCompletionBlock.日志中的错误描述是:
<CKError 0x1c4a51a60: "Server Rejected Request" (15/2000); server message = "Internal server error"; uuid = F67453B9-712D-4E5E-9335-929123E3C978; container ID = "iCloud.com.huntermaximillionmonk.topdraw">
以前,此操作可以使用,但仅适用于某些iCloud用户.现在它不适合我的两个测试用户.
苹果在这个答案发布后第二天就解决了这个问题,巧合吗?!我不这么认为:)
这实际上并不是问题的答案,而是帮助我克服这个错误的修复。它将要求您更改应用程序 UI 交互并将 ContactsUI 框架添加到您的项目中,此外您的用户将负责选择与 iCloud 相关的电子邮件的联系人。
好消息是该方法discoverUserIdentity仍然有效。因此,您可以使用它从手动选择的联系人中获取信息CKUserIdentity。
func addContact(_ contact:CNContact) {
var lookUpEmails = [CKUserIdentityLookupInfo]()
for email in contact.emailAddresses {
lookUpEmails.append(CKUserIdentityLookupInfo(emailAddress: (email.value as String)))
}
let checkUserOperation = CKDiscoverUserIdentitiesOperation()
checkUserOperation.userIdentityLookupInfos = lookUpEmails
checkUserOperation.userIdentityDiscoveredBlock = { [unowned self] (identity, info) -> Void in
if identity.hasiCloudAccount {
if let recordID = identity.userRecordID {
//do something with discovered user
}
checkUserOperation.cancel()
}
}
checkUserOperation.queuePriority = Operation.QueuePriority.high
CKContainer.default().add(checkUserOperation)
}
Run Code Online (Sandbox Code Playgroud)
这可能听起来没什么用,但就我而言,它帮助我解决了Server Rejected Request" (15/2000)错误,修复了我的应用程序的一个功能,并继续使用其他功能相关的代码,比我想象的要少。
我希望有人会觉得这很有帮助。
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |