CallKit 这个开发框架,能够让语音或视讯电话的开发者将 UI 界面整合在 iPhone 原生的电话 App 中.
CallKit 也拓展了在 iOS 8 就出现的 App Extensions 功能,可以让用户在接收来电时,在原生电话 App 中就透过第三方 App 辨识骚扰电话
创建一个callkit项目
1.首先要求iOS10以上的系统才可以使用CallKit功能
正常创建一个项目
创建项目2.添加一个target
添加Target3.选择Call Directory Extension
选择Call Directory Extension4.完成后项目中会多出一个文件夹
Call Directory Extension文件夹5.CallDirectoryHandler文件里已经写好了示例代码,但是这里的手机号码没有写+86等国际区号
添加号码标记信息6.在这里将手机号码和标签正确加入数组就即可,要注意手机号要加86,号码要增序排列,号码不能有重复。添加完成号码标记已经可以实现了,进入设置-电话-来电阻止与身份识别,打开我们app的开关就会执行
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context;方法
7.但是由于我们获取数据是在主工程里,而在我们Extension里无法与主工程数据互通,所以要用到App Group
创建App Groups点击添加,创建一个Group,要注意主工程和Extension中都要给group打上勾
8.苹果还提供了一个更新方法,调用这个方法就相当于重新打开一次打开来电阻止与身份识别里的开关
更新方法9.判断是否已开启权限的方法
是否开启权限使用中遇到的一些问题
1.调试
先在手机上运行app,再选择Extension运行
运行Extension选择自己的app - run 然后就可以调试Extension了
选择app2.导入成功,但接到电话没有标记
1)可能是没有在号码前加86 例如18100000000写入应该是8618100000000
2)在自己通讯录中存储过这个号码,系统会优先提示通讯录中名字
3.遇到的一些报错
Error Domain=com.apple.CallKit.error.calldirectorymanager Code=1 ;CXErrorCodeCallDirectoryManagerErrorNoExtensionFound 该错误可能出现的原因是identifier 设置的不对 注意不要使用app groups 使用的是Call Directory Extension 的identifier
Error Domain=com.apple.CallKit.error.calldirectorymanager Code=2 ;CXErrorCodeCallDirectoryManagerErrorLoadingInterrupted加载时被中断有可能是因为addAllIdentificationPhoneNumbersToContext中数据处理出错,打断点调试一下
Error Domain=com.apple.CallKit.error.calldirectorymanager Code=3;CXErrorCodeCallDirectoryManagerErrorEntriesOutOfOrder可能是因为加载数据格式错误比如号码中带有符号,号码没有增序排列
Error Domain=com.apple.CallKit.error.calldirectorymanager Code=4;CXErrorCodeCallDirectoryManagerErrorDuplicateEntries可能是的数据有重复
Error Domain=com.apple.CallKit.error.calldirectorymanagerCode=6;CXErrorCodeCallDirectoryManagerErrorExtensionDisabled 权限未打开
网友评论