在iOS10之后,蘋果開放了CallKit這個框架,該框架允許語音或者視訊電話的開發(fā)者講UI界面整合到iPhone原生的電話App中,該章節(jié)我們講講如何通過CallKit的拓展Call Directory Extension來實現(xiàn)來電識別,它的大概原理是,app通過系統(tǒng)提供的接口,預(yù)先將需要識別的號碼和對應(yīng)的識別結(jié)果(如:136xxxxxxxx -> 張三)寫入到系統(tǒng)內(nèi)部的數(shù)據(jù)庫中,然后來電時,系統(tǒng)會根據(jù)預(yù)設(shè)的號碼進(jìn)行識別,但是應(yīng)用本身并不能參與識別的過程,因此也不用擔(dān)心用戶隱私信息被泄露的問題。
主要用到下面三個方法:
1、該方法會在用戶開啟權(quán)限的時候自動調(diào)用
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context ;
2、該方法是添加黑名單
- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context ;
3、該方法是添加需要識別的號碼與識別的身份
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context ;
當(dāng)然我們不可能每次都是在用戶開啟權(quán)限的時候才去寫入數(shù)據(jù),所以還需要一個更新數(shù)據(jù)的接口方法:
- (void)reloadExtensionWithIdentifier:(NSString *)identifier completionHandler:(nullable void (^)(NSError *_Nullable error))completion;
需要注意點地方:
1、添加識別號碼的格式
手機號碼格式:86+手機號碼,如果不加86的話,會導(dǎo)致無法識別;
座機號碼格式:86+區(qū)號(區(qū)號第一個0不需要),如:0255XXXXXXXX,為86755XXXXXXXX
ps:這里只做個大概記錄,如感興趣的或者需要demo的可以簡信我。。。