通过iPhone上的来电获取来电者电话号码

时间:2016-05-11 11:26:14

标签: ios core-telephony

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

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

2 个答案:

答案 0 :(得分:9)

<强> ### EDIT ###

iOS 10及以上版本:

使用Callkit,查看通话目录扩展

根据文件,

识别来电者

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

例如,考虑在社交网络应用中与Jane成为朋友的用户,但在其联系人中没有她的电话号码。社交网络应用程序具有呼叫目录扩展,其下载并添加所有用户的朋友的电话号码。因此,当用户从Jane接到来电时,系统会显示“(App Name)来电显示:Jane Appleseed”而不是“Unknown Caller”。

要提供有关传入呼叫者的标识信息,请在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所说,在非越狱设备上无法使用来电显示。

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

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

  2. 您可能也会对收到的推送通知感到困惑 打电话,说     “有些X叫你”。这是truecaller使用技巧的地方。如果你     注意到,推送通知仅在收到时才会收到     你从安装了truecaller的android用户那里得到一个电话。让     我详细解释了你,

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

答案 1 :(得分:1)

在非越狱设备上无法使用来电显示。

但是有一种方法,您可以知道哪个用户正在呼叫,但不确定它是否对您有用。

如果您有连接到iPhone的蓝牙设备,它将收到所有通知,包括来电,然后您可以获取来电显示。

除此之外,目前还没有其他方法可以知道被叫ID。