我使用以下代码检索用户选择的人的电子邮件地址
ABMultiValueRef emailMultiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
NSArray *emailAddresses = (__bridge NSArray*)ABMultiValueCopyArrayOfAllValues(emailMultiValue);
自iOS6和Facebook整合以来,一切运行良好。当我选择一个没有链接到Facebook帐户的联系人时(这意味着我不是这个联系人的FB上的朋友)一切正常,我检索了2个电子邮件地址(工作和家庭)。
但是,当我选择通过Facebook链接到我的联系人(此联系人还有一个家庭和工作电子邮件地址以及联系人浏览器中的Facebook电子邮件地址)时,emailAddresses
数组为nil
。
之前是否有人遇到此问题或对此有任何提示?
提前致谢!
答案 0 :(得分:2)
要过滤掉Facebook联系人,您可以检查此人的kABSourceTypeProperty。如果它返回kABSourceTypeCardDAV,它可能来自Facebook,但它肯定不是本地联系人(它会返回kABSourceTypeLocal)。
不幸的是,从iOS 6开始,没有Facebook特定的源类型,因此使用kABSourceTypeCardDAV可能会过滤掉您可能真正关心的其他来源。无论如何,这里有一些代码;
ABRecordRef source = ABPersonCopySource(person);
NSNumber *sourceTypeRef = (__bridge NSNumber *)((CFNumberRef)ABRecordCopyValue(source, kABSourceTypeProperty)
if ([sourceTypeRef intValue] == kABSourceTypeCardDAV)
; // this is probably, maybe, could be a Facebook contact
if ([sourceTypeRef intValue] == kABSourceTypeLocal)
; // this is definitely a local contact
if ([sourceTypeRef intValue] == kABSourceTypeExchange)
; // this is from an exchange server
// etc...
答案 1 :(得分:1)
我找到了一种检查某人是否是Facebook联系人的方法。在我的情况下,问题是Facebook的联系人不可编辑,所以我不想在我提出的“地址簿更新程序”功能中显示它们。
(在苹果的地址簿应用程序中,您可以编辑Facebook联系人,但该应用程序实际上做的是创建一个新的联系人与新信息并将其链接到Facebook联系人。我不能这样做,因为链接不是iOS中的公共API。)
因此,为了找到我想忽略的那些facebook联系人,我只是检查ABRecordSetValue是否返回 true ,当我将firstname设置为当前的firstname时,就像这样。
bool didset = ABRecordSetValue(person, kABPersonFirstNameProperty, ABRecordCopyValue(person, kABPersonFirstNameProperty), nil);
答案 2 :(得分:0)
我发现自iOS6以来就有链接的联系人(普通联系< - > facebook< - > twitter等等)。
为了获取所有关联联系人的所有电子邮件,以下帖子帮助了我: iOS 6 address book empty kABPersonPhoneProperty
希望它有所帮助!