2012-12-01 23 views
3

我可以閱讀Facebook好友的名字,姓氏,生日......但我無法從我的地址簿中讀取Facebook用戶名編號。iOS6從地址簿中讀取Facebook用戶名編號

如果Facebook上的詳細信息位於我的手機的通訊錄上,它會很好的讀取,但如果它來自CardDAV服務器,則不會。

如果我去電話/模擬器上的AddressBook我可以看到用戶名......所以它們可用。

我有read_stream,email,read_friendlists,publish_stream,publish_actions權限。

請幫助......我已經江郎才盡

iOS6的時,Xcode 4.5,Facebook的SDK 3.1

// Extract 
// These all return values 

CFStringRef cfsPrefix  = ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonPrefixProperty); 
CFStringRef cfsFirstname = ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonFirstNameProperty); 
CFStringRef cfsLastname  = ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonLastNameProperty); 
CFStringRef cfsCompany  = ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonOrganizationProperty); 
NSDate*  datBirthday  = (NSDate*) CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonBirthdayProperty)); 
NSDate*  datCreate  = (NSDate*) CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonCreationDateProperty)); 
NSDate*  datModify  = (NSDate*) CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)recPerson, kABPersonModificationDateProperty)); 

// This never returns a value in strFacebook 

NSString *strFacebook; 

ABMultiValueRef socialMulti = ABRecordCopyValue((__bridge ABRecordRef) recPerson, kABPersonSocialProfileProperty); 

// ABMultiValueGetCount(socialMulti) always returns 0 ? 

for (CFIndex i = 0; i < ABMultiValueGetCount(socialMulti); i++) { 
    NSDictionary* social = (__bridge NSDictionary*)ABMultiValueCopyValueAtIndex(socialMulti, i); 

    if ([social[@"service"] isEqualToString:(__bridge NSString*)kABPersonSocialProfileServiceFacebook]) { 
     strFacebook = (NSString*)social[@"username"]; 
     NSLog(@"we got a facebook. username is %@ %@", [self nameForSource:(__bridge ABRecordRef)recPerson], cFacebook); 
    } 
} 

回答

1

我做以下和它的作品。
我知道這不完全是你在做什麼,但仍然 - 我的ABMultiValueGetCount工作正常。

ABAddressBookRef addressBook; 
addressBook = ABAddressBookCreate(); 
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 

NSMutableArray *socialArray = [[NSMutableArray alloc] init]; 
ABMultiValueRef socialProfiles = ABRecordCopyValue(record, kABPersonSocialProfileProperty); 
for (int i=0; i<ABMultiValueGetCount(socialProfiles); i++) { 
    NSDictionary *socialItem = (__bridge NSDictionary*)ABMultiValueCopyValueAtIndex(socialProfiles, i); 
    [socialArray addObject:socialItem]; 
} 
1

你可以得到Facebook的IM,這名添加到www.facebook.com/(fbName)

ABMultiValueRef profile = ABRecordCopyValue(who, kABPersonInstantMessageProperty); 
if (ABMultiValueGetCount(profile) > 0) 
{ 
    // collect all emails in array 

    for (CFIndex i = 0; i < ABMultiValueGetCount(profile); i++) 
    { 
     NSDictionary *socialItem = (__bridge NSDictionary*)ABMultiValueCopyValueAtIndex(profile, i); 
     NSString* SocialLabel = [socialItem objectForKey:(NSString *)kABPersonInstantMessageServiceKey]; 

     if([SocialLabel isEqualToString:(NSString *)kABPersonInstantMessageServiceFacebook]) 
     { 

      NSString *facebookProfile = ([socialItem objectForKey:(NSString *)kABPersonInstantMessageUsernameKey]); 
      NSLog(@"fbName %@",facebookProfile); 
     } 

    } 
    CFRelease(profile); 
} 
0

返回一個空的NSString( 「」),如果沒有Facebook的別名聯繫。

- (NSString*)facebookAliasForContact:(ABRecordRef)person { 
    ABMultiValueRef instantMessage = ABRecordCopyValue(person, kABPersonInstantMessageProperty); 
    NSString *facebookAlias = @""; 

    if (instantMessage) { 
     for (NSInteger i=0 ; i < ABMultiValueGetCount(instantMessage); i++) { 
      CFDictionaryRef instantMessageValue = ABMultiValueCopyValueAtIndex(instantMessage, i); 
      CFStringRef instantMessageString = CFDictionaryGetValue(instantMessageValue, kABPersonSocialProfileUsernameKey); 

    if (CFStringCompare(instantMessageString, kABPersonInstantMessageServiceFacebook, 0) == kCFCompareEqualTo) { 
      facebookAlias = (__bridge NSString *)instantMessageString; 
     }   

    CFRelease(instantMessageString); 
      CFRelease(instantMessageValue); 
     } 
    } 

    CFRelease(instantMessage); 

    return facebookAlias; 
} 
相關問題