Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios kABPerson Property |想知道通讯录联系人是否也在使用iPhone?_Ios_Properties_Addressbook - Fatal编程技术网

Ios kABPerson Property |想知道通讯录联系人是否也在使用iPhone?

Ios kABPerson Property |想知道通讯录联系人是否也在使用iPhone?,ios,properties,addressbook,Ios,Properties,Addressbook,我正在尝试开发一个应用程序,用户可以通过iMessage发送消息。因此,我可以从通讯录导入联系人列表,并通过MessageUI框架发送消息,但我想知道导入的联系人中有哪些也有iPhone,以便他们可以使用iMessage功能。有没有办法从kABPerson…属性中找到答案 这是我的代码: ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAu

我正在尝试开发一个应用程序,用户可以通过
iMessage
发送消息。因此,我可以从
通讯录
导入联系人列表,并通过
MessageUI框架
发送消息,但我想知道导入的联系人中有哪些也有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);

            }

        }
ABAddressBookRef addressBookRef=ABAddressBookCreateWithOptions(NULL,NULL);
if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined){
ABAddressBookRequestAccessWithCompletion(addressBookRef,^(已授予bool,CFErrorRef错误){
ABAddressBookRef addressBook=ABAddressBookCreate();
});
}
else if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusAuthorized){
CFErrorRef*错误=NULL;
ABAddressBookRef addressBook=ABAddressBookCreateWithOptions(空,错误);
CFArrayRef allPeople=abAddressBookCopyArrayFallPeople(addressBook);
CFIndex numberOfPeople=ABAddressBookGetPersonCount(地址簿);
for(int i=0;i
您的代码是确定通讯簿中的人是否有iMessage的最佳方法。但是,也有一个缺点:只有当用户正确设置他们的联系人时,它才起作用。通常情况下,字段设置不正确,这会使开发应用程序变得困难

这个问题以前有人问过,最高投票的答案是

您的启发式可能还可以,但它正确地依赖于用户 设置该属性

取决于上下文,它可能足够好/或不够 知道

没有真正的方法来检测哪个用户真正使用ios(没有API)