7

iOS9 弃用了 CloudKitABPerson的用户信息功能。

例如在 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];

两者都打印,例如 John'iPhone。

4

2 回答 2

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) ")   }
于 2015-06-13T07:57:06.853 回答
3

CKDiscoverAllContactsOperation 的文档中,您可以看到:

用户通讯录的搜索不会返回有关用户联系人的任何个人数据。搜索仅返回相应用户记录的 ID,这些记录仅包含您的应用放置在那里的数据。CloudKit 使用通讯录信息来识别当前用户知道的应用程序的用户。因为系统访问的是地址簿而不是您的应用程序,所以当访问发生时系统不会向用户显示提示。

查看 CloudKit 仪表板时,您可以看到 User 表中也没有名称。所以你也不能取它。

我认为 Apple 正在使服务匿名。您必须自己实现一些东西才能将名称附加到 id。正如您所描述的,您可以使用设备名称,也可以让用户自己输入他的名字。

我的第一个想法是通过首先使用 ABAddressBookCopyArrayOfAllPeople 查询所有联系人,然后使用 CKDiscoverUserInfosOperation 查找每封电子邮件的所有电子邮件来 实现一点。但显然,iOS 9 中也停止了这一功能。

看起来 Apple 正在停止访问所有个人数据。当您转到预发布库并过滤地址时,您仍然会看到很多引用。但是,一旦您转到详细信息页面,您只会看到所有内容都已弃用。

于 2015-06-12T11:02:27.093 回答