我正在尝试在来电时获取来电显示(电话号码)。
TrueCaller 已经实现了这一点,他们得到了来电者的电话号码。

我找到了这个信息:
1. CoreTelephony 框架(它只给出调用状态)
2. Apple 9.0 更新:“也许”通讯录同步。使用邮件应用程序并检测传入的电话号码。

最佳答案

###EDIT###

iOS 10 及更高版本:

使用 Callkit ,看看 call directory extension

根据文档,

识别来电者

当电话接到来电时,系统首先会查询用户的联系人以找到匹配的电话号码。如果未找到匹配项,系统将查询您应用的调用目录扩展,以查找匹配条目以识别电话号码。这对于维护与系统联系人分开的用户的联系人列表(例如社交网络)的应用程序,或用于识别可能从应用程序内部发起的传入调用的​​应用程序(例如,客户服务支持或交付通知)很有用.

例如,假设一个用户在社交网络应用程序中与 Jane 是 friend ,但在她的联系人中没有她的电话号码。社交网络应用程序有一个调用目录扩展,可以下载并添加用户所有 friend 的电话号码。因此,当用户接到 Jane 的来电时,系统会显示类似“(应用程序名称)来电显示:Jane Appleseed”而不是“未知来电者”的内容。

要提供有关传入调用者的识别信息,请在 beginRequest(with:) 的实现中使用 addIdentificationEntry(withNextSequentialPhoneNumber:label:) 方法。

class CustomCallDirectoryProvider: CXCallDirectoryProvider {
    override func beginRequest(with context: CXCallDirectoryExtensionContext) {
        let labelsKeyedByPhoneNumber: [CXCallDirectoryPhoneNumber: String] = [ … ]
        for (phoneNumber, label) in labelsKeyedByPhoneNumber.sorted(by: <) {
            context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label)
        }

        context.completeRequest()
    }
}

由于该方法仅在系统启动应用扩展时调用,而不是针对每个单独的调用调用,因此您必须一次指定所有调用标识信息;例如,您不能向 Web 服务发出请求以查找有关来电的信息。

iOS 9 及更早版本:

正如 Kakshil 所提到的, 来电显示在非越狱设备上是不可能的。

我会给你一些关于真正的来电者如何运作的发现,
  • 它没有读取通话记录,他们实际上创建了 Actionextension ,无论您尝试共享联系人的位置,它都会显示
    truecaller 应用程序扩展,用于显示联系人
    从他们的服务器
  • 获取的详细信息
  • 您可能还会对收到的推送通知感到困惑
    打电话说
    “某个 X 调用你”。这就是 truecaller 使用技巧的地方。如果你
    清楚地注意到,只有在以下情况下才会收到推送通知
    你接到一个安装了 truecaller 的安卓用户的电话。让
    我给你详细解释,

  • X(安装了truecaller 的android 用户),调用Y(安装了truecaller 的ios 用户),android 版本通知服务器X 调用Y。服务器将向Y 的iPhone 发送推送通知。

    关于ios - 从 iPhone 上的来电中获取来电者的电话号码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37161222/

    10-12 06:15