从iPhone接收的来电中获取呼叫者的电话号码

7

我想获取来电时的主叫方ID(电话号码)。 TrueCaller 已经实现了这一点,他们能够得到来电者的电话号码。

我找到了以下信息: 1. CoreTelephony 框架(仅提供呼叫状态) 2. 苹果的9.0更新: “可能”与邮件应用程序同步联系人,并检测到来电电话号码。


来电显示仅适用于越狱设备... - Rok Jarc
1
Truecaller并不会获取来电者的身份信息。相反,他们会将已知的垃圾电话号码添加到手机通讯录中,并将此联系人标记为“垃圾”。 - Paulw11
是的,但请检查他们的最新更新。他们实现了那个东西,并在他们的网站上发布了介绍信息。https://www.truecaller.com/articles/iphone - Anand Kore
Truecaller在iOS 9上推出了新的搜索来自通话记录的方法 最近发布的iOS 9为苹果社区带来了全新和改进的功能,而在Truecaller,我们也喜欢这个更新的所有可能性! - Anand Kore
那么,它是如何工作的呢? 手机应用程序:Truecaller正在引入一种快捷方式,可以直接从您的通话历史记录中查找从未知号码打来的电话! 步骤1)打开您的手机应用程序并转到“最近”。 步骤2)点击未知号码上的“i”图标。 步骤3)点击“共享联系人”。 步骤4)点击“更多”以启用Truecaller搜索插件。 - Anand Kore
显示剩余2条评论
2个回答

11

###EDIT###

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()
    }
}

因为此方法仅在系统启动应用扩展时调用,而不是针对每个单独的呼叫调用,因此您必须一次性指定所有呼叫身份识别信息;例如,您不能向 Web 服务发出请求以查找有关传入呼叫的信息。

iOS 9及更早版本:

如Kakshil所提到的,非越狱设备上无法使用来电显示。

我将给您一些关于Truecaller如何工作的发现:

  1. 它并不会读取通话历史记录,他们实际上创建了操作扩展,无论您在哪里共享联系人,它都会显示Truecaller应用程序扩展,这个扩展编码用于显示从其服务器获取的联系人详细信息

  2. 您可能也会因为某些电话而收到推送通知,称为“某些X正在呼叫您”。这就是Truecaller使用的一个技巧。如果您仔细注意,只有当您从已安装Truecaller的Android用户那里接听电话时,才会收到该推送通知。让我向您详细解释一下:

X(已安装Truecaller的Android用户)呼叫Y(已安装Truecaller的iOS用户),Android版本会通知服务器X正在给Y打电话。然后服务器将向Y的iPhone发送推送通知。


但是Truecaller会在Truecaller应用程序的通话选项卡中提供来电详细信息。 - Saurabh Jain
@SaurabhJain 你是否在Truecaller应用程序中接收到所有的来电? - KingofBliss
不,先生。我只接到了一些呼入电话。 - Saurabh Jain
先生,我正在开发一个扩展程序,它可以识别或阻止通话目录扩展中给定的号码,但是我该如何在我的应用程序中获取来电详细信息呢? - Saurabh Jain
请查看此问题:http://stackoverflow.com/questions/40837561/how-to-use-call-directory-extension-to-identify-a-incoming-call-in-my-application - Saurabh Jain
显示剩余6条评论

1

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

但是有一种方法,可以知道哪个用户在打电话,但不确定对您是否有用。

如果您连接了蓝牙设备到iPhone上,它将获取所有通知,包括来电通知,然后您就可以获取来电者的ID。

除此之外,目前没有其他任何方法可以知道来电者ID。


1
谢谢Kakshil,但请检查“TrueCaller”应用程序。他们访问通话记录和来电号码(我猜)。他们在2016年5月9日发布了最新版本。https://itunes.apple.com/in/app/truecaller-number-search-spam/id448142450?mt=8 - Anand Kore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接