利用CallKit实现来电阻止与身份识别
目录
最近有个需求需要来电识别企业内部通讯录的号码,即不将企业通讯录的信息加入到系统通讯录中,实现来电识别。类似于大数字、鹅厂的来电识别、骚扰拦截功能
准备工作
-
使用Realm存储内部通讯录的数据,Realm的具体操作可查看Realm的文档
-
为了使Extension能获取到主程序沙盒中的通讯录数据,我们可以开启App Groups实现宿主程序数据库共享,记得调用NSFileManager的containerURLForSecurityApplicationGroupIdentifier,实效数据库共享
-
开启数据库共享后我们就可以在Extension中获取到号码库中的数据了
CallKit部分
-
新建一个Call Directory Extension的扩展
-
系统默认有一个模板,根据数据进行增量或者全量处理,CallKit默认将号码一条条进行写入,写入前必须将号码进行从小到大的顺序进行排列好依次写入
|
|
- 号码库下载完成后可在主Target中调用Extension的入口函数进行数据的更新
|
|
开始识别
- 写入前先检查来电阻止与身份识别的权限,开启后再进行数据的写入操作
注意事项
- 号码库在写入前必须从小到大进行排列好
- 号码不能有重复
- 手机号码加上86,座机加上区号,虚拟网短号无需处理,所有号码不能以0为开头