从iPhone上的来电中获取来电者的电话号码

Ana*_*ore 7 ios core-telephony

我正打算在来电时获取来电显示(电话号码).TrueCaller实现了这一点,他们获得了来电者的电话号码.

我发现了这个信息:1.CoreTelephony框架(它只提供呼叫状态)2.Apple的9.0更新:"可能"联系人同步.使用邮件应用程序并检测传入的电话号码.

Kin*_*iss 10

###编辑###

iOS 10及以上版本:

使用Callkit,看一下调用目录扩展

根据文件,

识别来电者

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

例如,考虑在社交网络应用中与Jane成为朋友但在其联系人中没有她的电话号码的用户.社交网络应用程序具有呼叫目录扩展,其下载并添加所有用户的朋友的电话号码.因此,当用户从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()
    }
}
Run Code Online (Sandbox Code Playgroud)

因为只有在系统启动应用程序扩展而不是每个单独的呼叫时才调用此方法,所以必须同时指定呼叫识别信息; 例如,您不能向Web服务发出请求以查找有关来电的信息.

iOS 9及更早版本:

正如Kakshil所说,在非越狱设备上不可能使用来电显示.

我会给你一些关于真正的来电者如何工作的调查结果,

  1. 它没有读取通话记录,它们实际创建了Action扩展,无论您何时尝试共享联系人,它都会显示truecaller应用程序扩展,其编码用于显示从其服务器获取的联系人详细信息

  2. 您可能也会对收到少量电话的推送通知感到困惑,并说"有些X给您打电话".这是truecaller使用技巧的地方.如果您注意到,只有当您从安装了truecaller的Android用户接到电话时才会收到推送通知.让我详细解释一下,

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