当前位置:   article > 正文

iOS用CallKit实现来电识别、来电拦截

callkit 拦截ios

前言

最近需要实现一个新需求,用iOS 10出的CallKit实现将APP的通讯录的信息同步到系统中,可以不把人员信息加到通讯录中,实现来电号码识别。这个功能在xx安全卫士、xx管家中很早就实现了,但是网上相关的资料较少,而且官方的文档写的太简单了,很多坑还要自己去摸索。于是记录一下和各位分享,如有错误之处请各位指出!

PS: 先说个题外话吧,CallKit功能在iOS 10的时候还不太稳定,iOS 10刚出来的时候为了体验骚扰拦截功能,手贱装了两个不同的拦截APP,然后就悲剧了。盗一张网上的图:

img_f6a2f8a71a755f1757fcf606e763254b.png
1.png

然后各种重启、重装APP都没有用,写的Demo也跑不起来,唯一的办法只有重置系统。说多了都是泪!

一、Call Directory app extension

实现来电识别、来电拦截功能需要使用CallKit当中的Call Directory app extension,首先,需要了解extension。关于extension网上有很多教程,这里就不细说了。推荐两篇文章,英文好的推荐看官方文档,还有一篇中文博客

使用Call Directory Extension主要需要和3个类打交道,分别是
CXCallDirectoryProviderCXCallDirectoryExtensionContextCXCallDirectoryManager

img_67ba43f03685186db243edf24988e286.png
2.png

本文涉及的Demo

CXCallDirectoryProvider

官方文档:The principal object for a Call Directory app extension for a host app.

正如官方文档所说,这是Call Directory app extension最重要的一个类。
用系统模板新建Call Directory Extension之后会自动生成一个类,继承自CXCallDirectoryProvider。入口方法:

  1. // 有两种情况改方法会被调用
  2. // 1.第一次打开设置-电话-来电阻止与身份识别开关时,系统自动调用
  3. // 2.调用CXCallDirectoryManager的reloadExtensionWithIdentifier方法会调用
  4. - (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {
  5. context.delegate = self;
  6. // 添加号码识别信息与号码拦截列表
  7. [self addIdentificationPhoneNumbersToC
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/525858
推荐阅读
相关标签
  

闽ICP备14008679号