以编程方式在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。 在法律上,没有办法知道它。
由于某种安全原因,您无法获得自己的电话号码,但是您可以获取您的电话号码。 将其保存到您的联系人列表,然后您可以通过编程获取您的号码。