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