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