1

据我了解,iPhone SDK 中没有可用的公共 API 来查找用户的手机号码。

使用 4.0 SDK 中添加的 Core Telephony 框架可以找到 iPhone 用户的手机号码吗?

4

3 回答 3

7

是的,你可以,但这很棘手。它涉及使用iOS 私有 API,如果您想在 App Store 上发布它,它将确定 Apple 拒绝您的应用程序。

这是我所做的:

  1. 下载并安装类转储实用程序:http: //www.codethecode.com/projects/class-dump/
  2. 在命令行中转到此文件夹: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/CoreTelephony.framework 并执行以下命令:

    类转储 CoreTelephony > CoreTelephony.h

    这将在当前目录中创建一个头文件。将此文件移动到所需目录中。

  3. 在您的 Xcode 项目中,导入 CoreTelephony.framework(Xcode 4:单击项目目标 -> Build Phases 选项卡 -> Link Binary With Libraries -> + -> 在 iOS 列表中选择 CoreTelephony.framework -> 单击 Add)
  4. 使用与上述 Xcode 4 相同的方法导入 CoreTelephony.h 文件:单击项目目标 -> 构建阶段选项卡 -> 将二进制文件与库链接 -> + -> 添加其他 -> 在 Finder 中选择您的文件)
  5. 在 CoreTelephony.h 文件的末尾,添加以下内容:

    extern NSString *CTSettingCopyMyPhoneNumber();
    
  6. 在您的代码中导入 CoreTelephony.h 并调用上述函数。
  7. 在构建项目时,您可能会发现 CoreTelephony.h 中有编译错误 - 通常是一个接口声明需要在另一个接口声明或协议序列编写错误之前移动
  8. 如果您有链接错误,请在项目目标的构建设置中使用以下链接标志:

    -force_flat_namespace 
    -undefined suppress 
    

    (Xcode 4:点击项目目标 -> 构建设置选项卡 -> 链接 -> 双击其他链接器标志属性的值部分 -> + -> 在上面添加标志 -> 完成

  9. 现在你应该可以得到那个电话号码了:)
于 2012-02-08T10:38:29.470 回答
3

不,CoreTelephony 框架提供了有关运营商的一些基本信息和有关呼叫的有限信息,仅此而已。

有限的信息包括当前活动呼叫的数量、呼叫 ID(不是手机号码,只是操作系统用来跟踪特定呼叫的唯一 ID)和呼叫状态,例如呼叫是否处于保持状态或不。

CallTelephony 的主要功能是一个 API,用于检查运营商是否允许 3G 上的 VoIP。

于 2010-08-04T16:25:58.437 回答
0

如果您想从通话记录中获取手机号码,请查看此链接,它可能会有所帮助。但我不确定在使用这个苹果后会批准你的应用程序。 通话详情

于 2012-03-16T06:46:59.237 回答