2009-05-07 20 views
19

Vì vậy, tôi đang bối rối về điều này.Có cách nào để nhận thẻ "Tôi" từ API sổ địa chỉ iPhone không?

Trong Mac OS X, có một cách dễ dàng để nhận thẻ "Tôi" (chủ sở hữu máy Mac/tài khoản) từ API sổ địa chỉ được tích hợp sẵn.

Có ai tìm thấy cách tìm ra liên hệ nào (nếu có) thuộc về chủ sở hữu của iPhone không?

+1

Rõ ràng không, theo @wilshipley: http : //twitter.com/wilshipley/status/1369679612 –

+0

Bạn có thể cho tôi biết cách tôi có thể gắn thẻ Tôi nhớ trong mac không? – Johnykutty

+0

@Johnykutty Trên Mavericks, hãy chọn thẻ của bạn, sau đó sử dụng mục thẻ ** Tạo thẻ này làm thẻ của tôi **. – bneely

Trả lời

7

Bạn có thể sử dụng mặc định người sử dụng không có giấy tờ:

[[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]; 

và sau đó tìm kiếm sổ địa chỉ cho card với số điện thoại đó.

Hãy nhớ rằng vì Mặc định người dùng không có giấy tờ, Apple có thể thay đổi bất cứ lúc nào và bạn có thể gặp khó khăn khi truy cập vào App Store.

Một cách tiếp cận khác mà bạn có thể thực hiện, mặc dù nó dễ vỡ hơn nhiều, là nhìn vào tên thiết bị. Nếu người dùng đã không thay đổi nó từ mặc định "Tên người dùng iPhone" VÀ họ đang sử dụng tên thật của họ như là một chiếc iPhone, bạn có thể lấy tên người dùng từ đó. Một lần nữa, không phải là giải pháp tốt nhất bởi bất kỳ phương tiện, nhưng nó cung cấp cho bạn cái gì khác để thử.

Câu trả lời chung được chấp nhận cho câu hỏi này là gửi một Radar bằng Apple cho tính năng này và nhắc người dùng chọn thẻ của họ.

+0

Ứng dụng đã bị từ chối từ cửa hàng để thực hiện việc này. Dù sao nó không đáng tin cậy-- nếu người dùng đã chuyển số điện thoại của họ từ một nhà cung cấp dịch vụ điện thoại di động khác, cuộc gọi này gần như chắc chắn mang lại kết quả không chính xác. –

+0

Cảm ơn sự giúp đỡ. Sau khi đăng câu hỏi này, tôi mặc dù về phương pháp SBFormattedPhoneNumber. Nó có thể dễ dàng được thực hiện theo cách chứng minh tương lai "an toàn", nhưng có vẻ như Apple có thể không khuyến khích điều này vì nhiều lý do. Ngoài ra, Tom, cảm ơn những người đứng đầu. – amattn

+0

Điều này không còn trả về giá trị – Brian

4

Không có API nào trong SDK iPhone 2.2.1 trở về trước. Hãy gửi một yêu cầu cho nó tại địa chỉ: http://bugreport.apple.com

+0

Điều này vẫn đúng trong SDK 3.1? –

+0

Có, tôi tin rằng vậy –

+0

Bất kỳ cải tiến nào về điều này trong 4.2? – adib

4

Chỉnh sửa: [Câu trả lời lỗi thời]

Không có API để nhận thẻ "tôi" vì không có thẻ "tôi". Ứng dụng danh bạ của iPhone không có cách nào đánh dấu thẻ là "tôi" và API phản ánh điều này.

+0

Điều này không chính xác. Chắc chắn, ứng dụng Danh bạ không có cách nào để thực hiện việc này, nhưng bạn CÓ THỂ đặt thẻ "tôi" trong Cài đặt> Thư, Danh sách liên hệ, Lịch> Thông tin của tôi. – LucasTizma

+0

@LucasTizma: Câu trả lời ở trên được viết gần ba năm trước khi bạn trả lời. Đó là chính xác vào thời điểm đó nhưng tất nhiên mọi thứ thay đổi. –

+0

Ah, tôi thậm chí không nhận thấy ngày bạn trả lời. Xin lỗi vì điều đó! – LucasTizma

0

tôi đã đưa ra một giải pháp phần này

bạn có thể lấy tên thiết bị như sau

NSString *ownerName = [[UIDevice currentDevice] name]; 

bằng tiếng Anh một thiết bị được gọi nguyên gốc, ví dụ, 'iPhone Joe blogg của'

tách tên ra

NSRange t = [ownerName rangeOfString:@"’s"]; 
    if (t.location != NSNotFound) { 
     ownerName = [ownerName substringToIndex:t.location]; 
    } 

bạn có thể lấy tên đó và tìm kiếm địa chỉ liên hệ

CNContactStore * contactStore = [CNContactStore new];

NSPredicate *usersNamePredicate = [CNContact predicateForContactsMatchingName:usersName]; 

    NSArray * keysToFetch = @[[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNContactSocialProfilesKey, ]; 

NSArray * matchingContacts = [contactStore unifiedContactsMatchingPredicate:usersNamePredicate keysToFetch:keysToFetch error:nil]; 

Tất nhiên các ngôn ngữ khác khác nhau trong chuỗi tên thiết bị, ví dụ: 'iPhone Von Johann Schmidt' cần phân tích nhiều hơn cho các ngôn ngữ khác và nó chỉ hoạt động nếu người dùng không thay đổi tên thiết bị trong iTunes thành "Joes phone" nhưng nó cung cấp cho bạn một điểm khởi đầu

cũng ... nó cung cấp cho bạn một mảng các mục phù hợp :) Vì vậy, nếu có nhiều hơn một liên hệ với mảng đó bạn chỉ cần sử dụng nồi may mắn và đi với một đầu tiên hoặc làm việc qua nhiều thẻ và có những gì bạn cần từ mỗi.

tôi đã nói nó là một giải pháp phần và mặc dù nó sẽ không làm việc cho tất cả các trường hợp người dùng mà bạn có thể tìm thấy nó hoạt động đối với nhiều người dùng của bạn và làm giảm ma sát ít

Các vấn đề liên quan