簡體   English   中英

在iOS中以編程方式獲取自己的電話號碼

[英]Programmatically get own phone number in iOS

是否可以通過iPhone SDK中的標准API獲取自己的電話號碼?

冒着被打分的風險,我想建議排名最高的解決方案(當前為第一個響應)違反了截至2009年11月5日的最新SDK協議。我們的應用程序因使用它而被拒絕。 這是蘋果公司的回應:

“出於安全原因,iPhone OS將應用程序(包括其首選項和數據)限制為文件系統中的唯一位置。此限制是稱為應用程序“沙箱”的安全功能的一部分。沙箱是一組優良的功能,細粒度的控件限制了應用程序對文件,首選項,網絡資源,硬件等的訪問。”

該設備的電話號碼在您應用程序的容器中不可用。 您將需要修改您的應用程序以使其只能在目錄容器中讀取,然后將二進制文件重新提交給iTunes Connect,以便將您的應用程序重新考慮用於App Store。

真令人失望,因為我們想讓用戶不必輸入自己的電話號碼。

不,沒有合法可靠的方法可以做到這一點。

如果您找到了一種方法,那么將來它將被禁用,因為以前的每種方法都曾經發生過這種情況。

更新: Apple似乎已在iOS 4或周圍刪除了該功能


只是為了擴展一個較早的答案,類似這樣的事情對我來說是這樣的:

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];

注意 :這將檢索在iPhone的iTunes激活期間輸入的“電話號碼”,並且可以為null或不正確的值。 不會從SIM卡中讀取。

至少在2.1中如此。 NSUserDefaults中還有其他一些有趣的鍵,這些鍵也可能不會持續使用。 (這是在我的使用UIWebView的應用程序中)

WebKitJavaScriptCanOpenWindowsAutomatically
NSInterfaceStyle
TVOutStatus
WebKitDeveloperExtrasEnabledPreferenceKey

等等。

不知道其他人會做什么,如果有的話。

使用專用API,您可以通過以下方式獲取用戶電話號碼:

extern NSString* CTSettingCopyMyPhoneNumber();


+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();

return phone;
}

還將CoreTelephony.framework包含到您的項目中。

眾所周知,如果您使用下面的代碼行,則您的應用將被Apple拒絕。

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];

這是參考

http://ayeapi.blogspot.com/2009/12/sbformatphonenumber-is-lie.html

您可以改用以下信息

NSString *phoneName = [[UIDevice currentDevice] name];

NSString *phoneUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

等等

@property(nonatomic,readonly,retain) NSString    *name;              // e.g. "My iPhone"
@property(nonatomic,readonly,retain) NSString    *model;             // e.g. @"iPhone", @"iPod Touch"
@property(nonatomic,readonly,retain) NSString    *localizedModel;    // localized version of model
@property(nonatomic,readonly,retain) NSString    *systemName;        // e.g. @"iPhone OS"
@property(nonatomic,readonly,retain) NSString    *systemVersion;     // e.g. @"2.0"
@property(nonatomic,readonly) UIDeviceOrientation orientation;       // return current device orientation
@property(nonatomic,readonly,retain) NSString    *uniqueIdentifier;  // a string unique to each device based on various hardware info.

希望這可以幫助!

您不能單獨使用iOS API來捕獲電話號碼(即使在具有私有API的私有應用程序中),因為自iOS 11起,所有已知的實現此方法的方法都已被修補和阻止。明確表示,他們將拒絕使用私有API來執行此操作的所有應用商店中的應用。 有關詳細信息,請參見@Dylan的答案。

但是, 有一種合法的方式可以捕獲電話號碼,而無需輸入任何用戶數據 這與Snapchat相似,但更簡單,因為它不需要用戶鍵入自己的電話號碼。

想法是讓應用程序以編程方式將帶有該應用程序唯一安裝代碼的SMS消息發送到服務器。 然后,該應用程序可以查詢同一服務器,以查看它最近是否從具有此唯一應用程序安裝代碼的設備接收到SMS消息。 如果有,它可以讀取發送它的電話號碼。 這是演示該過程的演示視頻 如您所見,它就像一種魅力!

設置起來並非易事,但可以使用免費的AWS層在數小時內免費配置,並使用此處教程中提供的示例代碼進行配置。

沒有官方的API可以做到這一點。 使用私有API,您可以使用以下方法:

-(NSString*) getMyNumber {
    NSLog(@"Open CoreTelephony");
    void *lib = dlopen("/Symbols/System/Library/Framework/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);
    NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");
    NSString* (*pCTSettingCopyMyPhoneNumber)() = dlsym(lib, "CTSettingCopyMyPhoneNumber");
    NSLog(@"Get CTSettingCopyMyPhoneNumber from CoreTelephony");

    if (pCTSettingCopyMyPhoneNumber == nil) {
        NSLog(@"pCTSettingCopyMyPhoneNumber is nil");
        return nil;
    }
    NSString* ownPhoneNumber = pCTSettingCopyMyPhoneNumber();
    dlclose(lib);
    return ownPhoneNumber;
}

它可以在沒有JB和特殊簽名的iOS 6上運行。

正如前面提到的帶有JB的iOS 7上的 creker一樣 ,您需要使用權利才能使其正常工作。

如何使用權利來找到它: iOS 7:如何通過私有API獲得自己的號碼?

要獲取您的電話號碼,您可以閱讀plist文件。 它不適用於非越獄的iDevice:

NSString *commcenter = @"/private/var/wireless/Library/Preferences/com.apple.commcenter.plist";
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:commcenter];
    NSString *PhoneNumber = [dict valueForKey:@"PhoneNumber"];
    NSLog([NSString stringWithFormat:@"Phone number: %@",PhoneNumber]);

我不知道蘋果是否允許這樣做,但是它可以在iPhone上使用。

AppStore將拒絕它,因為它到達了應用程序容器之外。

應用程序應包含在捆綁包中,並且不能在指定容器區域之外讀取或寫入數據

第2.5.2節: https : //developer.apple.com/app-store/review/guidelines/#software-requirements

由於某些安全原因,您無法獲得自己的電話號碼,但您可以獲取您的電話號碼。 將其保存到您的聯系人列表,然后您可以以編程方式獲取您的號碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM