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

有没有办法从iPhone SDK的标准API获取自己的电话号码?

冒着负面评分的风险,我想build议截至2009年11月5日,排名最高的解决scheme(目前是第一个响应)违反了最新的SDK协议。我们的应用刚刚被拒绝使用它。 这是苹果的回应:

“出于安全原因,iPhone OS将应用程序(包括其首选项和数据)限制在文件系统中的唯一位置,这个限制是被称为应用程序”沙箱“的安全特性的一部分。沙箱是一组精细的,限制应用程序访问文件,首选项,networking资源,硬件等等的细节控制。

设备的电话号码在应用程序的容器中不可用。 您将需要修改您的应用程序,只读取您的目录容器,并重新提交您的二进制文件到iTunes Connect,以便重新考虑应用程序商店的应用程序。

由于我们想让用户不必input自己的电话号码,这真是令人失望。

不,没有合法可靠的方法来做到这一点。

如果你find方法,将来会被禁用,就像以前每种方法都发生了一样。

更新:function似乎已被苹果公司在iOS 4上或附近删除


只是为了扩大一个较早的答案,这样的事情对我来说是这样的:

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

注意 :这将检索在iPhone的iTunes激活过程中input的“电话号码”,可以为空或值不正确。 它不是从SIM卡上读取的。

至less在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; // eg "My iPhone" @property(nonatomic,readonly,retain) NSString *model; // eg @"iPhone", @"iPod Touch" @property(nonatomic,readonly,retain) NSString *localizedModel; // localized version of model @property(nonatomic,readonly,retain) NSString *systemName; // eg @"iPhone OS" @property(nonatomic,readonly,retain) NSString *systemVersion; // eg @"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. 

希望这可以帮助!

要得到您的电话号码,您可以阅读plist文件。 它不会在非越狱的iDevices上工作:

 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上使用。

没有官方的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上的 叽叽喳喳 ,你需要使用权利,使其工作。

如何做到这一点你可以在这里find的权利: iOS 7:如何通过私人API获取自己的号码?

您可以询问用户m.phone并使用短信进行validation。 在法律上,没有办法知道它。

由于某种安全原因,您无法获得自己的电话号码,但是您可以获取您的电话号码。 将其保存到您的联系人列表,然后您可以通过编程获取您的号码。