我使用以下代码来检索用户选择的人员的电子邮件地址
ABMultiValueRef emailMultiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
NSArray *emailAddresses = (__bridge NSArray*)ABMultiValueCopyArrayOfAllValues(emailMultiValue);
自从 iOS6 和 Facebook 集成以来,一切都运行良好。当我选择未链接到 Facebook 帐户的联系人(这意味着我在 FB 上与该联系人不是 friend )时,一切正常,我检索到 2 个电子邮件地址(工作和家庭)。
但是,当我选择通过 Facebook 链接到我的联系人(该联系人还有家庭和工作电子邮件地址以及联系人浏览器中的 Facebook 电子邮件地址)时,emailAddresses
数组为 nil
.
有人以前遇到过这个问题或者对此有任何提示吗?
提前致谢!
最佳答案
要过滤掉 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...
关于iphone - AddressBook kABPersonEmailProperty 对于某些联系人返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065053/