我一直在研究如何查找iOS设备的所有者电话号码,但没有运气。有一些帖子显示允许这样做的第三方框架,但被Apple拒绝。
在我的应用中,我可以通过姓名和电话访问AddressBook联系人并获取所有电话联系人。在我的情况下(使用我的iPhone,我没有在其他iPhone中测试)我可以看到我自己的号码与其他联系人一起列出。有没有办法找出/标记或识别联系人作为iPhone的所有者?
这是我的代码:
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));
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);
}
}
答案 0 :(得分:0)
无法从任何Apple公共API访问电话号码,这意味着您无法获取电话号码。
如果您正在实施拨号器应用程序,我无法看到您将拥有自己的电话号码。这不像你打算给自己打电话?
或
您可以从NSUserDefault
这适用于越狱设备。如果您希望将应用程序上传到AppStore,则不应使用这些代码。
[[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]
但这只有在用户输入了他的电话号码时才有效。 官方SDK中无法从SIM卡中读取任何内容。
答案 1 :(得分:-1)
你可以做的最好的事情就是在这个库中完成,试一试: ABGetMe
您可以切换为使用私有API-s或nit与ABGETME_ENABLE_PRIVATE_APIS
预处理器宏。