kABPerson Недвижимость | узнать, использует ли контакт AddressBook также iPhone?

Я пытаюсь разработать приложение, где пользователи могут отправлять сообщения через iMessage, Так что я могу импортировать список контактов из AddressBookи отправлять сообщения через MessageUI Framework, но я хотел бы знать, какие из импортированных контактов имеют также iPhone, чтобы они могли использовать iMessage возможность. Есть ли способ узнать из kABPerson...Имущество?

Вот мой код:

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
            ABAddressBookRef addressBook = ABAddressBookCreate( );
        });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {

 CFErrorRef *error = NULL;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
        CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
        CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);

        for(int i = 0; i < numberOfPeople; i++) {

            ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );

             NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
             NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));

             //Something like this ?
             BOOL *doeshaveiPhone = (__bridge BOOL *)(ABRecordCopyValue(person, kABPersonPhoneIPhoneLabel));


             NSLog(@"Name:%@ Surname: %@", firstName, lastName);


            ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);

            for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++)
            {
                CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j);
                CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(phones, j);
                NSString *phoneLabel =(__bridge NSString*) ABAddressBookCopyLocalizedLabel(locLabel);

                NSString *phoneNumber = (__bridge NSString *)phoneNumberRef;
                CFRelease(phoneNumberRef);
                CFRelease(locLabel);
                NSLog(@" - %@ (%@)", phoneNumber, phoneLabel);

            }

        }

1 ответ

Ваш код - лучший способ определить, есть ли у людей в адресной книге iMessage. Однако есть недостаток: он работает только в том случае, если пользователь правильно настроил свои контакты. Слишком часто поля задаются неправильно, что может затруднить разработку приложений.

Этот вопрос был задан ранее. Здесь ответ с наибольшим количеством голосов говорит,

Ваша эвристика может быть в порядке, но она полагается на пользователя, правильно установившего этот атрибут.

в зависимости от контекста это может быть достаточно хорошо / или нет.. не знаю.

нет никакого реального способа определить, какой пользователь действительно использует ios (нет API)

Другие вопросы по тегам