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など...)。

リンクされたすべての連絡先のすべての電子メールを取得するために、次の投稿が役に立ちました: iOS6アドレスブックが空ですkABPersonPhoneProperty

それが役に立てば幸い!

于 2013-02-01T21:37:58.760 に答える