我试图使用云工具包获取用户名,但以下代码未获得用户名,并且将firstNameFromFunction变量留空。有谁知道如何在iOS 10中实现这一目标?
let container = CKContainer.default()
container.fetchUserRecordID { (recordId, error) in
if error != nil {
print("Handle error)")
}else{
self.container.discoverUserInfo(
withUserRecordID: recordId!, completionHandler: { (userInfo, error) in
if error != nil {
print("Handle error")
}else{
if let userInfo = userInfo {
print("givenName = \(userInfo.displayContact?.givenName)")
print("familyName = \(userInfo.displayContact?.familyName)")
firstNameFromFunction = userInfo.displayContact?.givenName
}else{
print("no user info")
}
}
})
}
}
答案 0 :(得分:1)
说到电子邮件地址 - 这和来自lookupInfo属性的电话号码丢失了 - 即设置为nil,即使这些值是合法且正确的。今晚提交一个错误。
答案 1 :(得分:1)
首先,您需要获得访问用户信息的权限。
然后,您可以使用CKDiscoverUserIdentitiesOperation。这与任何其他CKOperation(例如修改记录操作)一样。您只需使用useridentitylookupinfo创建一个新操作。然后,您还需要创建一个完成块来处理结果。
这是我创建的示例函数:
func getUserName(withRecordID recordID: CKRecordID,
completion: @escaping (String) -> ()) {
if #available(iOS 10.0, *) {
let userInfo = CKUserIdentityLookupInfo(userRecordID: recordID)
let discoverOperation = CKDiscoverUserIdentitiesOperation(userIdentityLookupInfos: [userInfo])
discoverOperation.userIdentityDiscoveredBlock = { (userIdentity, userIdentityLookupInfo) in
let userName = "\((userIdentity.nameComponents?.givenName ?? "")) \((userIdentity.nameComponents?.familyName ?? ""))"
completion(userName)
}
discoverOperation.completionBlock = {
completion("")
}
CKContainer.default().add(discoverOperation)
} else {
// iOS 10 and below version of the code above,
// no longer works. So, we just return an empty string.
completion("")
}
}
答案 2 :(得分:0)
首先,您需要询问用户是否允许被发现。
使用CKContainer.default().requestApplicationPermission
方法在applicationPermission参数上传递.userDiscoverability。
在iOS 10上不推荐使用CKContainer.default().discoverUserInfo
方法。而是使用CKContainer.default().discoverUserIdentity method.
做类似的事情:
CKContainer.default().requestApplicationPermission(.userDiscoverability) { (status, error) in
CKContainer.default().fetchUserRecordID { (record, error) in
CKContainer.default().discoverUserIdentity(withUserRecordID: record!, completionHandler: { (userIdentity, error) in
print("\(userIdentity?.nameComponents?.givenName)")
print("\(userIdentity?.nameComponents?.familyName)")
})
}
}