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)