是否能够经过iPhone SDK中的标准API获取本身的电话号码? 安全
使用专用API,您能够经过如下方式获取用户电话号码: 网络
extern NSString* CTSettingCopyMyPhoneNumber(); +(NSString *) phoneNumber { NSString *phone = CTSettingCopyMyPhoneNumber(); return phone; }
还将CoreTelephony.framework包含到您的项目中。 app
要获取您的电话号码,您能够阅读plist文件。 它不适用于非越狱的iDevice: less
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上使用。 spa
冒着被打分的风险,我想建议排名最高的解决方案(当前为第一个响应)违反了截至2009年11月5日的最新SDK协议。咱们的应用程序因使用它而被拒绝。 这是苹果公司的回应: code
“出于安全缘由,iPhone OS将应用程序(包括其首选项和数据)限制为文件系统中的惟一位置。此限制是称为应用程序“沙箱”的安全功能的一部分。沙箱是一组优良的功能,细粒度的控件限制了应用程序对文件,首选项,网络资源,硬件等的访问。”
该设备的电话号码在您应用程序的容器中不可用。 您将须要修改您的应用程序以使其只能在目录容器中读取,而后将二进制文件从新提交给iTunes Connect,以便将您的应用程序从新考虑用于App Store。
真使人失望,由于咱们想让用户没必要输入本身的电话号码。 orm
不,没有合法可靠的方法能够作到这一点。 ip
若是您找到了一种方法,那么未来它将被禁用,由于之前的每种方法都曾经发生过这种状况。 资源
更新: Apple彷佛已在iOS 4或周围删除了该功能 string
只是为了扩展一个较早的答案,相似这样的事情对我来讲是这样的:
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
注意 :这将检索在iPhone的iTunes激活期间输入的“电话号码”,而且能够为null或不正确的值。 它不会从SIM卡中读取。
至少在2.1中如此。 NSUserDefaults中还有其余一些有趣的键,这些键也可能不会持续使用。 (这是在个人使用UIWebView的应用程序中)
WebKitJavaScriptCanOpenWindowsAutomatically NSInterfaceStyle TVOutStatus WebKitDeveloperExtrasEnabledPreferenceKey
等等。
不知道其余人会作什么,若是有的话。