有没有办法从iPhone SDK的标准api获得自己的电话号码?
当前回答
使用私有API,您可以通过以下方式获取用户电话号码:
extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();
return phone;
}
也可以将coretphony .framework包含到你的项目中。
其他回答
使用私有API,您可以通过以下方式获取用户电话号码:
extern NSString* CTSettingCopyMyPhoneNumber();
+(NSString *) phoneNumber {
NSString *phone = CTSettingCopyMyPhoneNumber();
return phone;
}
也可以将coretphony .framework包含到你的项目中。
不,没有合法可靠的方法来做这件事。
如果您找到了一种方法,它将在未来被禁用,就像之前的每个方法一样。
你不能单独使用iOS api来捕获电话号码(即使是在带有私有api的私有应用程序中),因为所有已知的方法都已在iOS 11中被修补和阻止。即使发现了新的漏洞,苹果已经明确表示,他们将拒绝应用商店中任何使用私有api进行攻击的应用程序。详见@Dylan的回答。
但是,有一种合法的方法可以在不输入任何用户数据的情况下获取电话号码。这与Snapchat的功能类似,但更简单,因为它不需要用户输入自己的电话号码。
这个想法是让应用程序以编程的方式向服务器发送一条短信,使用应用程序的唯一安装代码。然后,应用程序可以查询同一台服务器,以查看它最近是否收到了来自具有此唯一应用程序安装代码的设备的SMS消息。如果有,它可以读取发送它的电话号码。这里有一个演示视频展示了这个过程。正如你所看到的,它就像一个咒语!
这并不是非常容易设置,但是可以在几个小时内免费在AWS层上使用本教程中提供的示例代码进行配置。
要得到你的电话号码,你可以读取一个plist文件。它将不能在非越狱设备上工作:
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。
AppStore会拒绝它,因为它超出了应用容器。
应用程序应该在它们的包中是自包含的,并且不能读取或写入指定容器区域之外的数据
第2.5.2节: https://developer.apple.com/app-store/review/guidelines/#software-requirements
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0
- 缺少推荐的图标文件-该包不包含iPhone / iPod Touch的应用程序图标,像素为“120x120”,png格式
- 以编程方式创建segue