赞
踩
最近需要实现一个新需求,用iOS 10出的CallKit实现将APP的通讯录的信息同步到系统中,可以不把人员信息加到通讯录中,实现来电号码识别。这个功能在xx安全卫士、xx管家中很早就实现了,但是网上相关的资料较少,而且官方的文档写的太简单了,很多坑还要自己去摸索。于是记录一下和各位分享,如有错误之处请各位指出!
PS: 先说个题外话吧,CallKit功能在iOS 10的时候还不太稳定,iOS 10刚出来的时候为了体验骚扰拦截功能,手贱装了两个不同的拦截APP,然后就悲剧了。盗一张网上的图:
然后各种重启、重装APP都没有用,写的Demo也跑不起来,唯一的办法只有重置系统。说多了都是泪!
实现来电识别、来电拦截功能需要使用CallKit当中的Call Directory app extension
,首先,需要了解extension。关于extension网上有很多教程,这里就不细说了。推荐两篇文章,英文好的推荐看官方文档,还有一篇中文博客。
使用Call Directory Extension主要需要和3个类打交道,分别是CXCallDirectoryProvider
、CXCallDirectoryExtensionContext
、CXCallDirectoryManager
。
本文涉及的Demo。
官方文档:The principal object for a Call Directory app extension for a host app.
正如官方文档所说,这是Call Directory app extension最重要的一个类。
用系统模板新建Call Directory Extension之后会自动生成一个类,继承自CXCallDirectoryProvider
。入口方法:
- // 有两种情况改方法会被调用
- // 1.第一次打开设置-电话-来电阻止与身份识别开关时,系统自动调用
- // 2.调用CXCallDirectoryManager的reloadExtensionWithIdentifier方法会调用
- - (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {
- context.delegate = self;
- // 添加号码识别信息与号码拦截列表
- [self addIdentificationPhoneNumbersToC
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。