iOS9弃用了用户信息功能for CloudKit和ABPerson。
e.g。在CKDiscoveredUserInfo
的属性中的firstName"在iOS 9.0中不推荐使用
lastName的"在iOS 9.0中不推荐使用
我想要以前在iOS8 CloudKit中提供的姓氏和名字。
如何在iOS9 CloudKit,ABPerson或其他东西中检索类似信息?
[[UIDevice currentDevice] name];
NSArray *nameArray = [[NSHost currentHost] names];
NSString *user = [nameArray objectAtIndex:0];
两者都打印例如约翰'的iPhone。
答案 0 :(得分:4)
对于iOS9,通过Contact Framework
获取用户个人联系信息Contacts框架提供了一个Objective-C和Swift API来访问 用户的联系信息。
更换ABAdressBook
此框架适用于所有Apple平台,并取代了 iOS和OS X中的地址簿框架。
具体而言,CNContact
CNContact是一个代表不可变的线程安全类 联系人属性的值对象,例如名字和电话 联系人的号码。
获取联系人
您可以使用联系人存储(CNContactStore)获取联系人 表示用户的联系人数据库
搜索用户的联系人数据库(iOS 9.0新增功能)
例如,姓名,姓氏,生日,电话号码等。
let store = CNContactStore()
let contacts = try store.unifiedContactsMatchingPredicate(CNContact.predicateForContactsMatchingName("Appleseed"), keysToFetch:[CNContactGivenNameKey, CNContactFamilyNameKey])
let contact = contacts!.first //assuming contain at least one contact
// Checking if phone number is available for the given contact.
if (contact.isKeyAvailable(CNContactPhoneNumbersKey)) {
print("\(contact.givenName) \(contact.familyName)")
} else {
//Refetch the keys
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey]
let refetchedContact = try store.unifiedContactWithIdentifier(contact.identifier, keysToFetch: keysToFetch)
print("\(refetchedContact.givenName) \(refetchedContact.familyName)")
}
搜索当前用户信息
if let personInfo:CNContact = CKDiscoveredUserInfo.displayContact{
println("first name: \(personInfo.givenName) last name: \(personInfo.familyName) ") }
答案 1 :(得分:3)
在documentation for CKDiscoverAllContactsOperation中,您可以看到:
搜索用户的地址簿不会返回任何个人信息 有关用户联系人的数据。搜索仅返回的ID 相应的用户记录,仅包含您的应用所放置的数据 那里。 CloudKit使用通讯簿信息来识别用户 当前用户知道的应用程序。因为系统访问了 地址簿而不是您的应用程序,系统不显示提示 发生访问时的用户。
查看CloudKit仪表板时,您可以看到User表中也没有名称。所以你也不能拿它。
我认为Apple正在匿名提供服务。你必须自己实现一些东西,以便为id附加一个名字。如您所述,您可以使用设备名称,也可以让用户自己输入他的名字。
我的第一个想法是首先使用ABAddressBookCopyArrayOfAllPeople查询所有联系人,然后使用CKDiscoverUserInfosOperation为每封电子邮件查找所有电子邮件,以实现此目的。但显然在iOS 9中也停止了一个。
Apple似乎停止访问所有个人数据。当你转到prerelease library并过滤地址时,你仍会看到很多引用。但是,只要您转到详细信息页面,您就会看到所有内容都被弃用。