2

アドレス帳から Facebook の連絡先のみを取得する必要があります。私は多くのスレッドを経て、次のコードを思いつきました。

- (IBAction)buttonPressed:(id)sender {
if (ABAddressBookRequestAccessWithCompletion) { // if in iOS 6

    // Request authorization to Address Book
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
                    [self getFacebookContacts:addressBookRef];
        });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
                [self getFacebookContacts:addressBookRef];
    }
    else {
        // The user has previously denied access
        // Send an alert telling user to change privacy setting in settings app
    }
}
else{ // if not in iOS 6

    ABAddressBookRef addressBookRef = ABAddressBookCreate();
            [self getFacebookContacts:addressBookRef];
    NSLog(@"Not ios 6");
    }
 }

-(void) getFacebookContacts:(ABAddressBookRef) addressBookRef
{
    CFArrayRef allContacts = ABAddressBookCopyArrayOfAllPeople(addressBookRef);
    CFIndex contactCount = CFArrayGetCount(allContacts);
    // Traverse through contacts
    for(int i=0; i<contactCount; i++)
    {
        ABRecordRef ref = CFArrayGetValueAtIndex(allContacts, i);
        //Check if contact has social profile
        ABMultiValueRef social = ABRecordCopyValue(( ABRecordRef)ref, kABPersonSocialProfileProperty);
        if (social) {
            // *****   This is coming as 0     **********
            CFIndex count = ABMultiValueGetCount(social); 
            for (int i = 0 ; i < count; i++) {
                CFDictionaryRef socialValue = ABMultiValueCopyValueAtIndex(social, i);
                if(CFStringCompare( CFDictionaryGetValue(socialValue, kABPersonSocialProfileServiceKey), kABPersonSocialProfileServiceFacebook, 0)==kCFCompareEqualTo) {
                    NSLog(@"Facebook Contact %d : %@",i, (NSString*) CFDictionaryGetValue(socialValue, kABPersonSocialProfileUsernameKey));
                }
            }
        }
    }
}

取得しているソーシャル プロファイルのカウントが 0 であるため、連絡先を取得できません。設定→FacebookからFacebookアカウントを同期した後、アドレス帳に追加された連絡先がたくさんあります

コードを確認して、提案があるかどうか、または何か間違っているかどうかをお知らせください。

4

1 に答える 1

0

kABPersonSocialProfileUsernameKey を取得しようとしていますが、空である可能性があります。kABPersonSocialProfileUserIdentifierKey で試してください。

于 2015-09-05T09:07:42.683 に答える