以编程方式获取设备的电话号码

16

我需要以编程方式获取我的iOS设备的电话号码。

通过谷歌搜索,我找到了这段代码:

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber"];
NSLog(@"Phone Number: %@", num);

但是我在某个地方读到,如果我使用这段代码,苹果将会拒绝我的应用。

有没有办法在不需要用户输入的情况下获取当前设备的电话号码?


我将你使用的“number”更改为“电话号码”,以便清楚地表明你不是在询问设备的UDID号码。 - Matthew Frederick
2个回答

24

不,设备的电话号码不能被程序化地获取,而且这也是被苹果所认可的。幸运的是,我绝对不希望一些我出于好奇而下载的免费应用程序抓取我的电话号码并开始给我发送垃圾短信或让营销人员打电话给我。


有趣的阅读:http://www.kuberan.me/2011/03/your-mobile-numbers-are-being-stolen-by-websites/ - Phill Pafford
@Phill 这很有趣。幸运的是,iPhone没有“运营商计费”,因此不需要发送任何数据。您可以编写一个简单的“返回标头”的网页(这是我在阅读此内容后做的第一件事),以查看发送的确切标头,或者访问执行相同操作的站点。以下是一个显示所有标头的站点,请从您的iPhone访问以查看发送的内容(也请从您的笔记本电脑/台式机访问):http://www.ericgiguere.com/tools/http-header-viewer.html - Matthew Frederick

5
您已经得到了答案:

请问如何在无需用户输入的情况下获取当前设备号码?

是的,您可以使用您提供的代码片段来实现。
但是,如果您在没有用户输入的情况下以编程方式获取电话号码,您的应用将被苹果拒绝。这很简单明了。
如果您需要该号码,请向用户请求。如果他们信任您,他们会输入号码的。

如果用户输入错误的数字,我们该如何处理? - Mahesh Babu
1
通过短信网关从您的服务器向该号码发送验证码(而不是从用户手机发送),然后要求用户输入该号码。 - Sarwar Erfan
为什么你需要这个号码?如果你不需要拨打电话或发送短信给用户,请不要获取它。如果你不需要拨打电话或发送短信给用户,那么请重新考虑你的模型,将电话号码排除在外。 - Sarwar Erfan
我需要在服务器端验证用户设备号和电话号码,如果两者相同,我将提供服务。这是我的要求。 - Mahesh Babu
1
如果我问用户,“我能检测到您的电话号码并使用它吗(将解释为什么我需要电话号码)?”并且用户允许这样做,我会运行 @MaheshBabu 给出的代码。 - chatur
即使你向用户询问:“我能检测到你的电话号码并使用它吗(将解释为什么需要电话号码)?” 苹果仍然会检测到获取电话号码的方法并拒绝你的应用程序。 - Guntis Treulands

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接