2014-04-25 16 views
-1

我一直在研究如何找到iOS設備的所有者電話號碼,但沒有運氣。有篇文章都顯示允許這樣做的第三方框架,但被Apple拒絕。在2014年找到店主的電話號碼?

在我的應用程序中,我正在訪問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); 

      } 

     } 
+2

Apple高度保護設備所有者的隱私,尤其是來自開發人員。爲什麼你需要在沒有業主許可的情況下獲取這樣的私人信息?總是懷疑...... – holex

+0

@holex我想要擁有者的許可。我想問問店主,因爲我正在訪問聯繫人列表。有什麼辦法嗎? –

+2

@PauSenabre,如果你想獲得所有者的許可,然後通過輸入字段在你的應用中直接詢問他們的電話號碼...你不認爲這是適當的解決方案嗎? – holex

回答

0

電話號碼是不是從任何蘋果的公共API,這意味着你不能讓它訪問。

如果你正在實現一個撥號程序應用程序,我看不到你自己的電話號碼。這不像你會打電話給自己?

OR

你可以從NSUserDefault用戶的電話號碼:

這對於越獄的設備。如果您希望將您的應用上傳到AppStore,則不應使用這些代碼。

[[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"] 

但是,這隻會在用戶輸入他的電話號碼時才起作用。 官方SDK無法從SIM卡中讀取任何內容。

+0

它不起作用。給我(null) –

+0

@PauSenabre查看我的完整答案,如果這隻會在用戶輸入他的電話號碼時才起作用。 –

+0

probabaly它有助於理解:http://stackoverflow.com/questions/9481935/sbformattedphonenumber-is-not-working – holex

-1

你能做的最好的事情就是在這個圖書館已經完成,試試看: ABGetMe

您可以切換到使用私有API-S或NIT與ABGETME_ENABLE_PRIVATE_APIS預處理宏。