需求:需要实现项目中根据号码从服务器查询返回的标记写入calllkit放骚扰标记系统库中,来电时显示该标记
最终的效果如图所示:
一、准备工作
1、新建一个swift 项目
2、创建callkit扩展:选择file->new->target,选择Call Directory Extension,输入扩展的名称,创建好后选择Activate
3、想实现项目与扩展的数据共享,需要打开Capabilities-->App Groups的开关,并点击“+”新建一个app groups(一般命名是以group. 开头)
4、同样的,项目中也需要打开Capabilities-->App Groups的开关,选择3中创建好的app groups
5、运行程序,需要在设置-->电话-->来电阻止与身份识别-->找到项目打开对应的开关
准备工作做好了,下面代码逻辑的展示
1、在主界面创建3个按钮,分别为 检查权限、写入共享数据、读取共享数据
1)创建扩展Manager、文件Manager、存储数据的dic、以及app group的url,并初始化
var exManager : CXCallDirectoryManager!
var fileManager : FileManager!
var dic: NSMutableDictionary!
var containURL : URL!
override func viewDidLoad() {
super.viewDidLoad()
dic = NSMutableDictionary.init()
exManager = CXCallDirectoryManager.sharedInstance
fileManager = FileManager.default
dic.setValue("中介", forKey: "8613120076711")
dic.setValue("骗子", forKey: "8612345678901")
}
2)检查权限:目的是检查callkit标记功能的权限是否开启(开启方法:见上面第5条),若未开启,数据是无法写入系统标记库的,需要用户手动开启
exManager.getEnabledStatusForExtension(withIdentifier: CALLKITEX_IDENTIFIER) { (status : CXCallDirectoryManager.EnabledStatus, error) in
if error != nil{
self.promissiondDesLabel.text = "权限获取发生错误"+error.debugDescription
}else{
switch status