iOS6 Чтение идентификатора пользователя Facebook из адресной книги
Я могу прочитать имя, фамилию, день рождения друзей Facebook, но не могу прочитать идентификатор пользователя 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);
}
}
3 ответа
Я делаю следующее, и это работает.
Я знаю, что это не совсем то, что вы делаете, но все же - мой 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];
}
Вы можете получить чат в Facebook и добавить это имя на 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);
}
Возвращает пустую строку 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;
}