2015-06-09 11 views
7

iOS9 không dùng tính năng thông tin người dùng for CloudKitABPerson.Tìm tên người dùng hoặc họ/tên trong iOS9 CloudKit/ABPerson (ABAddressBook)

ví dụ: trong các thuộc tính của CKDiscoveredUserInfo

firstName "Deprecated trong iOS 9.0

lastName" Không dùng nữa trong iOS 9,0

Tôi muốn họ và tên đầu tiên theo quy định trước đây trong iOS8 CloudKit.

Cách truy xuất thông tin tương tự trong CloudKit iOS9, ABPerson hoặc một thứ khác?

Short of grace method is this

[[UIDevice currentDevice] name]; 

NSArray *nameArray = [[NSHost currentHost] names]; 
NSString *user = [nameArray objectAtIndex:0]; 

Cả hai ví dụ in John'iPhone.

+0

Tốt câu hỏi. Tôi đề nghị đợi phiên trên CloudKit trong tuần này ở WWDC để nghe về những thay đổi và ý nghĩa của chúng. – harryhorn

Trả lời

3

Trong documentation for CKDiscoverAllContactsOperation bạn có thể thấy điều này:

Việc tìm kiếm của sổ địa chỉ của người sử dụng không trả lại bất kỳ dữ liệu cá nhân về địa chỉ liên lạc của người dùng. Tìm kiếm chỉ trả lại các ID của hồ sơ người dùng tương ứng, chỉ chứa dữ liệu mà ứng dụng của bạn đặt tại đó. CloudKit sử dụng thông tin sổ địa chỉ để xác định người dùng của ứng dụng mà người dùng hiện tại biết. Vì hệ thống truy cập vào sổ địa chỉ thay vì ứng dụng của bạn, hệ thống không hiển thị lời nhắc cho người dùng khi truy cập đó xảy ra.

Khi tìm trong trang tổng quan CloudKit, bạn có thể thấy rằng không có tên trong bảng Người dùng. Vì vậy, bạn cũng không thể tìm nạp nó.

Tôi cho rằng Apple đang làm cho dịch vụ ẩn danh. Bạn phải thực hiện một cái gì đó chính mình để đính kèm một tên vào một id. Như bạn đã mô tả, bạn có thể sử dụng tên thiết bị hoặc bạn có thể để chính người dùng nhập tên của mình.

Ý tưởng đầu tiên của tôi là triển khai điều này bằng cách truy vấn trước tiên tất cả địa chỉ liên hệ bằng cách sử dụng ABAddressBookCopyArrayOfAllPeople và sau đó tra cứu tất cả email bằng cách sử dụng CKDiscoverUserInfosOperation cho mỗi email. nhưng dường như một người cũng bị ngừng hoạt động trong iOS 9.

Có vẻ như Apple đang ngừng truy cập vào tất cả dữ liệu cá nhân. khi bạn đi đến số prerelease library và lọc địa chỉ, bạn sẽ vẫn thấy rất nhiều tài liệu tham khảo. Nhưng ngay sau khi bạn đi đến một trang chi tiết, bạn sẽ chỉ thấy mọi thứ không được chấp nhận.

+0

Cảm ơn. Nó truyền cảm hứng cho câu trả lời của tôi. Yêu công việc của bạn với EV CloudKit trong Github và cuộc trò chuyện với bạn ở đó. – Kevin

4

Đối iOS9, thu thập thông tin người dùng tiếp xúc cá nhân qua Contact Framework

Các hệ framework cung cấp một Objective-C và Swift API để truy cập thông tin liên lạc của người dùng.

Thay ABAdressBook

khung này có sẵn trên tất cả các nền tảng của Apple và thay thế Address Book khuôn khổ trong iOS và OS X.

Cụ thể, CNContact

Các CNContact là một lớp thread-an toàn đại diện cho một bất biến đối tượng giá trị cho các thuộc tính liên hệ, chẳng hạn như tên và số điện thoại số của một số liên lạc.

Liên hệ Tìm nạp các

Bạn có thể lấy địa chỉ liên lạc sử dụng các cửa hàng liên lạc (CNContactStore), mà đại diện cho địa chỉ liên lạc của người sử dụng cơ sở dữ liệu

Tìm kiếm của người sử dụng hệ cơ sở dữ liệu (mới trong iOS 9.0)

tên trứng, tên gia đình, ngày sinh, số điện thoại và mo lại.

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)") 
} 

Tìm kiếm Current User Info

if let personInfo:CNContact = CKDiscoveredUserInfo.displayContact{ 

println("first name: \(personInfo.givenName) last name: \(personInfo.familyName) ") } 
Các vấn đề liên quan