3

我正在使用以下代码来检索用户选择的人员的电子邮件地址

ABMultiValueRef emailMultiValue = ABRecordCopyValue(person, kABPersonEmailProperty);
NSArray *emailAddresses = (__bridge NSArray*)ABMultiValueCopyArrayOfAllValues(emailMultiValue);

自从 iOS6 和 Facebook 集成以来,一切都运行良好。当我选择一个未链接到 Facebook 帐户的联系人时(这意味着我不是该联系人在 FB 上的朋友),一切正常,我检索到 2 个电子邮件地址(工作和家庭)。但是,当我选择一个通过 Facebook 链接到我的联系人(该联系人还有一个家庭和工作电子邮件地址以及联系人浏览器中的 Facebook 电子邮件地址)时,emailAddresses数组是nil.

以前有没有人遇到过这个问题或对此有任何提示?

提前致谢!

4

3 回答 3

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...
于 2012-12-31T05:31:13.990 回答
1

我找到了一种方法来检查一个人是否是 Facebook 联系人。就我而言,问题是 facebook 联系人不可编辑,所以我不想在我制作的“地址簿更新程序”功能中显示它们。

(在苹果的地址簿应用程序中,您可以编辑 facebook 联系人,但该应用程序实际所做的是使用新信息创建一个新联系人并将其链接到 facebook 联系人。我不能这样做,因为链接不是公共 API在 iOS 中。)

因此,要找到我想忽略的那些 facebook 联系人,我只需检查当我将名字设置为当前名字时ABRecordSetValue 是否返回true ,就像这样。

bool didset = ABRecordSetValue(person, kABPersonFirstNameProperty, ABRecordCopyValue(person, kABPersonFirstNameProperty), nil);
于 2013-01-30T11:53:14.227 回答
0

我发现自 iOS6 以来有链接的联系人(普通联系人 <-> facebook <-> twitter 等等......)。

为了获取所有链接联系人的所有电子邮件,以下帖子帮助了我: iOS 6 address book empty kABPersonPhoneProperty

希望能帮助到你!

于 2013-02-01T21:37:58.760 回答