2009-05-07 2 views
19

그래서 나는이 하나에 난처합니다.iPhone 주소록 API에서 "Me"카드를 가져 오는 방법이 있습니까?

Mac OS X에는 내장 주소록 API에서 "Me"카드 (Mac/계정의 소유자)를 쉽게 얻을 수있는 방법이 있습니다.

누구든지 iPhone 소유자에게 속한 연락처 (있는 경우)를 찾는 방법을 찾았습니까?

+1

분명히 약간의 마찰을하지 감소 찾을 수 있습니다 : HTTP : //twitter.com/wilshipley/status/1369679612 –

+0

Mac에서 어떻게 카드를 찍을 수 있습니까? – Johnykutty

+0

@Johnykutty 매버릭스에서 카드를 선택한 다음 ** 카드> 내 카드 만들기 ** 메뉴 항목을 사용하십시오. – bneely

답변

7

당신은 문서화되지 않은 사용자 기본을 사용할 수 있습니다 :

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

을 한 후 해당 전화 번호를 카드에 주소록을 검색에서 이에 대한 요청을 제출하시기 바랍니다.

사용자 기본값이 문서화되어 있지 않기 때문에 언제든지 Apple을 변경할 수 있으며 App Store에 들어가는 데 어려움이있을 수 있습니다.

당신이 취할 수있는 또 다른 접근 방법은 훨씬 더 약하지만 장치 이름을 보는 것입니다. 사용자가 기본 "사용자 이름의 iPhone"에서 변경하지 않고 실제 이름을 iPhone으로 사용하고 있다면 사용자 이름을 그 이름에서 가져올 수 있습니다. 다시 말하지만, 어떤 방법으로도 최선의 해결책은 아니지만, 시도해 볼만한 것이 있습니다.

이 질문에 대한 일반적으로 받아 들여지는 대답은이 기능에 대한 레이더를 Apple에 제출하고 사용자가 카드를 선택하도록하는 것입니다.

+0

이렇게하기 위해 스토어에서 앱을 거부했습니다. 어쨌든 신뢰할 수 없습니다. 사용자가 다른 휴대 전화 통신 회사의 전화 번호를 이식하면이 호출은 잘못된 결과를 거의 확실하게 나타냅니다. –

+0

도움을 주셔서 감사합니다. 이 질문을 게시 한 후 SBFormattedPhoneNumber 접근법에 대해 생각해 봅니다. 그것은 "안전한"미래의 증명 방법으로 쉽게 구현 될 수 있지만, 애플은 여러 가지 이유로 이것을 낙담시킬지도 모른다고 들린다. 또한, Tom, 머리를 가져 주셔서 감사합니다. – amattn

+0

더 이상 값을 반환하지 않습니다. – Brian

4

iPhone SDK 2.2.1 및 이전 버전에는 이러한 API가 없습니다. http://bugreport.apple.com

+0

이것은 3.1 SDK에서 여전히 사실입니까? –

+0

예, 그렇습니다. –

+0

4.2에서 개선 된 점은 무엇입니까? – adib

4

편집 : [폐기 대답]에는 "나"카드가 없기 때문에 "나"카드를 얻기위한 API가 없습니다

. iPhone의 연락처 앱은 카드를 "나"로 표시 할 수있는 방법이 없으며 API가이를 반영합니다.

+0

이것은 사실이 아닙니다. 물론 주소록 앱은이 작업을 수행 할 방법이 없지만 설정> 메일, 연락처, 캘린더> 내 정보에서 '나'카드를 설정할 수 있습니다. – LucasTizma

+0

@ LucasTizma : 위의 대답은 당신이 그것에 반응하기 거의 3 년 전에 작성되었습니다. 당시로서는 정확했지만 물론 사물이 바뀌 었습니다. –

+0

아, 나는 당신이 그 날짜에 응답하지 않은 것을 알았습니다. 미안합니다! – LucasTizma

0

나는 예를 들어, 장치가 원래라고 영어로

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

을 다음과 같이 장치 이름을 얻을 수있는이

에 대한 부분적인 해결책을했다, '조 Blogg의 아이폰

당신이 그 이름을 취할 수

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

이름 밖으로 휴식 및 연락처 검색

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]; 

물론 다른 언어는 장치 이름 문자열이 다릅니다. 'iPhone Von Johann Schmidt'는 다른 언어를 위해 더 많은 구문 분석이 필요하며 사용자가 iTunes의 장치 이름을 "Joes phone"과 같은 것으로 변경하지 않은 경우에만 작동하지만 시작 지점을 제공합니다.

잘 ... 그것은 당신에게 일치하는 항목의 배열을 제공합니다 :) 그래서 그 배열과 하나 이상의 연락처가 있다면 당신은 단지 냄비를 사용하고 첫 번째와 함께 가야하거나 여러 카드를 통해 일하고 당신이 필요로하는 걸 각각에서.

나는 그것에게 부분적인 해결책을 말 했는가하고 모든 사용자의 경우에 작동하지 않습니다 비록 당신은 @wilshipley에 따라, 사용자의 많은 작품과

관련 문제