2012-10-15 150 views
1

我遇到问题。 我正在做一个应用程序在ios 6从我的地址簿获取联系人,但如果我已启用facebook的联系人选项从我的地址簿和facebook从我的所有联系人,我想如果有可能与代码不要得到facebook联系人。 只有我认为是的解决方案是或合并具有相同名称的联系人或删除具有@ facebook.com电子邮件的联系人。同步联系人在ios 6中禁用facebook联系人

其他解决方案?

回答

0

检查@ facebook.com电子邮件地址不可靠。用户可以选择不发布该地址,非Facebook地址簿条目可以将其作为他们的电子邮件地址。

地址簿中有一个名为ExternalRepresentation的特殊字段,它似乎带有一些关于从Facebook联系人同步的额外信息。这个第一部分似乎总是一样的。

警告:这可能无法一直工作,并可能在将来某一天中断。这是没有记录的。

static NSData *facebookExtRepPrefix = [NSData dataWithBytes:"bplist00\xd4\x01\x02\x03" length:12]; 
#define kABPersonExternalRepresentationProperty 39 

然后

NSData *extRep = (__bridge NSData *)ABRecordCopyValue(theRecord, kABPersonExternalRepresentationProperty); 
BOOL isFacebook = [[extRep subdataWithRange:NSMakeRange(0, facebookExtRepPrefix.length)] isEqualToData:facebookExtRepPrefix]; 

,那么你可以阅读kABPersonPersonLinkProperty(#42) - 该值将是链接到它的本地联系人相同。

0

使用默认源即ABAddressBookCopyDefaultSourceABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering给我的手机联系人(不Facebook联系人)。

我没有把地址簿中的人数统计为ABAddressBookGetPersonCount,而是使用allPeople数组(从上面)获取人数。

if (accessGranted) { 

    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); 
    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook); 
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName); 

    CFIndex nPeople = CFArrayGetCount(allPeople);//Not ABAddressBookGetPersonCount(addressBook) as that returns all contacts, Facebook included; 
    items = [NSMutableArray arrayWithCapacity:nPeople]; 


    for (int i = 0; i < MIN(nPeople, 20); i++) 
    { 

     ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i); 

     //Do something with this person 
    } 
} 

编号:获取所有联系人:https://stackoverflow.com/a/17976915/1349663

+0

我要删除的Facebook联系人...你能告诉我如何删除联系人列表中的Facebook联系人 –