如何使用CallKit获取来电号码

6
如何使用CallKit框架通过编程方式获取来电电话号码。我尝试使用CXCallObserver类,但没有用。有什么建议最有帮助...

1
callKit仍处于beta测试阶段,目前没有最终版本概述可用,因此请等待最终发布。 - Nitin Gohel
1
嗨,Nitin如果可以使用CallKit,那就太好了。如果可能的话,我会等待最终版本的发布。 - Ashok Narvaneni
2个回答

10

当使用iOS 10中的CallKit的呼叫拦截和识别功能时,您的应用程序的通话目录扩展会在来电之前加载要阻止或识别的电话号码,并由系统存储这些电话号码。然后,当来电到达时,系统会查询已存储的数据,并根据提供的标签在来电用户界面中阻止或识别来电。

出于隐私和性能方面的考虑,当有来电到达时,不会启动通话目录应用程序扩展,应用程序扩展也无法检索来电的电话号码。


4
如果这是真的,那么作为来电显示实际上就毫无用处了。应用程序事先无法知道谁会打电话!它必须在运行时进行。 - Sarang
3
Truecaller如何寻找来电的信息? - Saurabh Jain
请检查以下链接:http://stackoverflow.com/questions/40837561/how-to-use-call-directory-extension-to-identify-a-incoming-call-in-my-application - Saurabh Jain
@Stuart M:你能帮我吗?:https://dev59.com/kZ7ha4cB1Zd3GeqPkoU6 - Abhishek Thapliyal

0

iOS 10 中引入的 Call Directory 扩展与 iOS 9 中引入的 Safari 内容拦截器扩展类似。您的扩展必须提供一个电话号码列表(在 Safari 的扩展中,它是一个 json 文件),这些号码将由 iOS 存储,并在有来电事件时,系统会检查您的扩展提供的列表(就像 Safari 在加载网站之前检查 json 文件指定的规则一样),前提是您的扩展此时处于活动状态。

因此,使用此功能创建类似 Caller ID 的应用程序是不可能的,因为事情并不是动态的。 此外,您可以在列表中提供的电话号码数量上存在限制,希望这将在 iOS 10 发布时公布。


你有相关的代码可以分享吗?或者有什么参考资料可以提供,让我找到相关的代码! - Nithin Pai
有关数字限制方面的任何消息吗?此外,您知道您的扩展是何时以及多久运行一次以添加新数字的吗?那么删除先前添加的数字呢? - Chris Wagner
1
@ChrisWagner 目前为止,开发者网站上还没有关于限制的说明。 要删除数字,我已经将所有数字存储在数据结构中,删除了数字,然后再次保存了所有数字。 更新频率也取决于iOS,但是您可以使用以下方法强制更新:[[CXCallDirectoryManager sharedInstance] reloadExtensionWithIdentifier:EXTENSION_IDENTIFIER completionHandler:^(NSError * _Nullable error) { //your completetion }]; - Sagar D
感谢@ShaggyD,我已经成功地索引了超过6,700条记录而没有任何问题。我也可以证实重新加载操作是完整的,任何之前索引的项目将在重新加载时被删除。这是有道理的,因为你需要按顺序提供数字。 - Chris Wagner
经过一些实验,我发现最大的阻止呼叫条目数量大约在2,000,000左右。很难说这是每个应用程序的限制还是手机上加载的所有呼叫阻止应用程序的总限制。 - Alan Kinnaman

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