年前各种项目验收,总结,所以没时间更新博客。年初,刚刚静下来,这次文章,让我们讨论一下,iOS10新特性,来电识别和来电阻止
iOS 10中引入了许多新特性,其中 CallKit是一个非常重要的 API,The CallKit framework PRovides programmatic access to Voip functionality, as well as call blocking and identification. 这意味着现在可以通过 Call Directory Extension 来实现电话识别和黑名单功能了。本文简单阐述了如果实现简单的来电识别和黑名单功能。 Extension一直很轻量,单一的,这次的 Call Directory Extension 也不出例外,出奇的简单。下面我们逐步完成今天的任务
Step1、 创建Call Directory Extension
在对应项目中的file->new->target,选择application Extension中的Call Directory Extension,如图: 输入Extension项目名称后,创建成功后会弹出这样的提示框:点击激活,直接进入到Extension项目。
Step2、 来电识别和来电阻止
1、项目创建成功后,在项目目录文件中,生成了Info.plist、CallDirectoryHandler.h、CallDirectoryHandler.m三个文件。我们需要关注的是CallDirectoryHandler.m。 2、打开CallDirectoryHandler.m,里面自动生成了四个方法
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context - (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context- (void)requestFailedForExtensionContext:(CXCallDirectoryExtensionContext *)extensionContext withError:(NSError *)error其中简单的来电识别和来电阻止我们只要补全addIdentificationPhoneNumbersToContext和addBlockingPhoneNumbersToContext方法,在里面添加来电识别数据和黑名单数据就可以了。 3、来电识别
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context { - CXCallDirectoryPhoneNumber phoneNumbers[] = {+8613533533110,+8613726735411,+86158140043377}; NSArray<NSString *> *labels = @[ @"Dear",@"陈老湿",@"乾坤"]; NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber)); for (NSUInteger i = 0; i < count; i += 1) { CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[i]; NSString *label = labels[i]; [context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label]; } return YES;}注意点:1、电话号码前要加区号:+86;2、电话号码需要升序排列
4、来电阻止
- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context { CXCallDirectoryPhoneNumber phoneNumbers[] = {13726735412,18005555555 }; NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber)); for (NSUInteger index = 0; index < count; index += 1) { CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[index]; [context addBlockingEntryWithNextSequentialPhoneNumber:phoneNumber]; } return YES;}注意点:1、电话号码需要升序排列
上面简单介绍来电识别和来电阻止,现在我们安装app到手机,必须是64位的设备。然后进入设备的设置 —> 电话 —> 来电阻止和身份识别,开启我们的 App即可。
到此为止,我们简单介绍如何简单实现来电阻止和身份识别,利用Call Directory Extension很简单实现该功能,重点是如何编辑这个黑名单列表。列表数据项可能很多,并且数据可能是实时更新添加的,那应该怎么做才更好呢?这个需要大家的思考~~
利用业余时间看了官方文档,简单介绍一下,如有理解错误,望大家指出
新闻热点
疑难解答