最近在做一个项目,用到callkit的call directory extension来做陌生号码识别。网上很多文章写得不清楚甚至是错的,在此做一些勘误。本人也是小白,如有理解错误不吝赐教。
1、基础环境:
xcode12(最低版本要求不清楚,反正要支持IOS10)
一个真的插卡的iphone,要求iphone6以上(要64位CPU和IOS10)
2、参考教程
(1)苹果官方
(2)大神讲解过程
3、勘误
(1)beginRequestWithExtensionContext这个方法,会在打开系统设置的开关时调用。这个地方说的有一点含糊,我试了几个办法都没有办法调试这个extension,包括Stack Overflow的,也许是我太菜了。
(2)addAllIdentificationPhoneNumbers和addOrRemoveIncrementalIdentificationPhoneNumbers
这两个方法是最重要的添加号码的地方。一开始我只在addAllIdentificationPhoneNumbers里面添加,但是没有用,后来发现这个方法不行,这个方法似乎只有第一次安装这个app才会调用,后面再添加号码,应该走的addOrRemoveIncrementalIdentificationPhoneNumbers方法。这个地方注意一下。
(3)addOrRemoveIncrementalIdentificationPhoneNumbers时候注意事项
由于苹果不让你知道哪些号码已经在数据库(用的sqlite,号码重复会报错),所以最好全量更新。更新前加一句context.removeAllIdentificationEntries()即可。
(4)removeAllIdentificationEntries会不会清空全部数据库
查了一下报错时候的sql语句,table里面insert的时候有一个代表appid的字段,应该是根据应用分开的。推测不会清掉别的app写入的号码。
(5)为什么明明设置打开了,但是没有识别号码
插件加载时,只要报错,这个extension就会无法加载,直接全部挂掉。解决了报错就会恢复。
(6)为啥明明在工程中加了target,但是手机设置里面开关没出现
看一下你调试的是哪个target,如果是extension,肯定看不到。
(7)如何更新号码库
其实就是reloadextension,苹果的api可以查,csdn也有demo
(8)号码要不要加国家代码
我们单位短号是5位的,测试下来不要。长号未测试。
以上。