在iOS中以编程方式获取自己的电话号码

让人想犯罪 __ 提交于 2020-03-10 19:29:40

是否可以通过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

等等。

不知道其他人会做什么,如果有的话。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!