Получение телефонных номеров из Facebook, синхронизированных с контактами из адресной книги Unified Info

Мне нужно иметь возможность прочитать номер телефона контактов из адресной книги пользователя. Проблема в том, что если пользователь решил синхронизировать эти контакты через Facebook, они больше не будут доступны через следующий код (который работает для несинхронизированных контактов):

ABMultiValueRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty);
DLog(@"Found %ld phones", ABMultiValueGetCount(phones));
for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
{        
    CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
    CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(phones, j);
    NSString *phoneLabel =(__bridge NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
    NSString *phoneNumber = (__bridge NSString *)phoneNumberRef;
    CFRelease(phoneNumberRef);
    CFRelease(locLabel);
    DLog(@"  - %@ (%@)", phoneNumber, phoneLabel);
    [numbersArr addObject:phoneNumber];
}

Результат журнала: [Line 126] Found 0 phones

Я пытался использовать CFArrayRef userNumbers = ABMultiValueCopyArrayOfAllValues(phoneNumbers);
, но это тоже ничего не возвращает: [Line 118] Got user numbers: (null)

Вот я и пытался копаться в социальных профилях, и это тоже ничего не дает!

// Try to get phone numbers from social profile
        ABMultiValueRef profiles = ABRecordCopyValue(record, kABPersonSocialProfileProperty);
        CFIndex multiCount = ABMultiValueGetCount(profiles);
        for (CFIndex i=0; i<multiCount; i++) {
            NSDictionary* profile = (__bridge NSDictionary*)ABMultiValueCopyValueAtIndex(profiles, i);
            NSLog(@"TESTING - Profile: %@", profile);

        }
        DLog(@"Got profiles: %@", profiles);
        CFRelease(profiles);

Тем не менее запись в журнале: [Line 161] Got profiles: ABMultiValueRef 0x1ddbb5c0 with 0 value(s)

Если приведенные выше результаты ничего мне не дают, как я должен узнать, что они являются пользователями Facebook, и получить информацию об их телефонах?


person joslinm    schedule 05.03.2013    source источник


Ответы (1)


Из службы поддержки Apple:

У нас нет API-интерфейсов, которые будут возвращать контакт из единой адресной книги. Однако вы можете получить номера телефонов контактов, которые отображаются как унифицированные в приложении «Контакты» на вашем устройстве, сначала используя ABPersonCopyArrayOfAllLinkedPeople для получения всех связанных контактов, а затем перебирая эти контакты, чтобы получить соответствующие номера телефонов. Обратите внимание, что номера телефонов, которые не отображаются в пользовательском интерфейсе в Контактах, не будут возвращены API адресной книги. Ниже приведен фрагмент кода, который позволит вам это сделать:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

{

//Fetch all linked contacts

CFArrayRef linkedPerson = ABPersonCopyArrayOfAllLinkedPeople(person);

//Iterate through each linked contact to fetch the phone numbers

for (CFIndex i = 0; i < CFArrayGetCount(linkedPerson); i++)

{

ABRecordRef contact = CFArrayGetValueAtIndex(linkedPerson,i);

ABMutableMultiValueRef multi = ABRecordCopyValue(contact, kABPersonPhoneProperty);

for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++)

{

CFStringRef label = ABMultiValueCopyLabelAtIndex(multi, i);

CFStringRef number = ABMultiValueCopyValueAtIndex(multi, i);

CFRelease(label);

CFRelease(number);

}

CFRelease(multi);

}

CFRelease(linkedPerson);

return YES;
person joslinm    schedule 25.03.2013