iOS之来电阻止与身份识别实现
为了屏蔽各种中介的电话骚扰,最近安装了腾讯手机管家,安装完成后,设置“骚扰拦截”功能时,App提示需要点击“设置--->电话--->来电阻止与身份识别--->勾选App提供的"黄页"、“电话识别”和“电话拦截”。
了解过苹果沙盒机制的朋友都知道,一般在App中要访问到其他 App/硬件(地理位置,相册,通讯录,话筒) 内容,会通过系统弹窗询问用户,必须要获取管理员许可才行,比如这样:
那么上面的“来电阻止和身份识别”功能又是什么东东呢?
CallKit.framework
苹果在iOS 10中为我们带来了callkit.framework,当我们语言通话显示系统界面时,它允许我们对来电号码进行识别、过滤、标记、阻止等操作。目前国内垃圾电话、骚扰电话、诈骗电话不胜其烦,针对iPhone全球第二大市场,苹果今次顺势而为推出开放接口,也算是人心所向。有兴趣的朋友可以通过官方文档说明了解callkit.framework。
下面我们尝试来写一个demo,让自己App出现在电话“设置--->电话--->来电阻止与身份识别 列表中,实现来电过滤功能
1、新建一个iOS工程
2、完成后,新建target:点击"+"---> 选择iOS,Call Directory Extension, 输入名称如:CallFirewall,一路next,选择“Activate”
3、完成上面操作,可以看到在项目工程中,自动生成了下面几个文件。
4、打开文件 CallDirectoryHandler.h 和 CallDirectoryHandler.m,使用注意事项,请参照代码注释:
//
// CallDirectoryHandler.h
// CallFirewall
//
// Created by lvxiangan on 26/07/2017.
// Copyright © 2017 lvxiangan. All rights reserved.
//#import <Foundation/Foundation.h>
#import <CallKit/CallKit.h>@interface CallDirectoryHandler : CXCallDirectoryProvider@end
//
// CallDirectoryHandler.m
// CallFirewall
//
// Created by lvxiangan on 26/07/2017.
// Copyright © 2017 lvxiangan. All rights reserved.
//#import "CallDirectoryHandler.h"@interface CallDirectoryHandler () <CXCallDirectoryExtensionContextDelegate>
@end@implementation CallDirectoryHandler// 请求前检查
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {context.delegate = self;if (![self addBlockingPhoneNumbersToContext:context]) {NSLog(@"Unable to add blocking phone numbers");NSError *error = [NSError errorWithDomain:@"CallDirectoryHandler" code:1 userInfo:nil];[context cancelRequestWithError:error];return;}if (![self addIdentificationPhoneNumbersToContext:context]) {NSLog(@"Unable to add identification phone numbers");NSError *error = [NSError errorWithDomain:@"CallDirectoryHandler" code:2 userInfo:nil];[context cancelRequestWithError:error];return;}[context completeRequestWithCompletionHandler:nil];
}// 来电阻止
- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {// Retrieve phone numbers to block from data store. For optimal performance and memory usage when there are many phone numbers,// consider only loading a subset of numbers at a given time and using autorelease pool(s) to release objects allocated during each batch of numbers which are loaded.//// Numbers must be provided in numerically ascending order.CXCallDirectoryPhoneNumber phoneNumbers[] = { 14085555555, 18005555555 };NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));for (NSUInteger index = 0; index < count; index += 1) {CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[index];[context addBlockingEntryWithNextSequentialPhoneNumber:phoneNumber];}return YES;
}// 来电识别
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {// Retrieve phone numbers to identify and their identification labels from data store. For optimal performance and memory usage when there are many phone numbers,// consider only loading a subset of numbers at a given time and using autorelease pool(s) to release objects allocated during each batch of numbers which are loaded.//// Numbers must be provided in numerically ascending order.CXCallDirectoryPhoneNumber phoneNumbers[] = { 18775555555, 18885555555 };NSArray<NSString *> *labels = @[ @"Telemarketer", @"Local business" ];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;
}#pragma mark - CXCallDirectoryExtensionContextDelegate// 添加黑名单或识别来电失败处理
- (void)requestFailedForExtensionContext:(CXCallDirectoryExtensionContext *)extensionContext withError:(NSError *)error {// An error occurred while adding blocking or identification entries, check the NSError for details.// For Call Directory error codes, see the CXErrorCodeCallDirectoryManagerError enum in <CallKit/CXError.h>.//// This may be used to store the error details in a location accessible by the extension's containing app, so that the// app may be notified about errors which occured while loading data even if the request to load data was initiated by// the user in Settings instead of via the app itself.
}@end
同理,参照腾讯手机管家的做法,我们建多几个target,就会在“来电阻止与身份识别”中有多个选项。
这样,我们就可以根据自定义target用途,来编写不同功能的代码了。
iOS之来电阻止与身份识别实现相关推荐
- iOS CallKit来电标签和电话拉黑
前言 最近两天公司有需求研究CallKit来电标签和电话拉黑,在网上找了一些相关博文.但是发现对于没接触过这方面的人来说,还是会遇到一些问题,所以打算自己再写一篇详尽的文章. 懒得看的请直接下载最下面 ...
- OCR--苹果ios安卓android身份证拍照扫描识别sdk
一.ios安卓android身份证拍照扫描识别sdk应用背景 这些年,随着移动互联网的的发展,越来越多的企业都推出了自己的移动APP,这些APP多数都涉及到个人身份证信息的输入认证(即实名认证),如果 ...
- 身份识别协议枚举工具ident-user-enum
身份识别协议枚举工具ident-user-enum 身份识别协议(Ident protocol,IDENT)是一种Internet协议,用于识别使用特定TCP端口的用户身份.服务器开启该服务后,会默认 ...
- 因为你组织的安全策略阻止未经身份验证的来宾(试了很多种办法都不行)
最近在远程访问文件夹的时候出现了这个问题:因为安全策略阻止未经身份验证的来宾访问,类似这样的问题我们该如何解决呢, HKLM\SYSTEM\CurrentControlSet\Services\Lan ...
- 你组织的安全策略阻止未经身份验证的来宾访问_你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证来宾访问。...
一.现象描述 今天去给客户安装系统,安装的是windows10操作系统,使用的是administrator登录帐户,安装完系统后,访问客户的共享电脑,发现无法访问,但是其它电脑都可以正常访问,而且也都 ...
- Schnorr身份识别方案
Schnorr身份识别协议是又一个零知识证明协议,相比Fiamt协议有两点不同,一是其安全性依赖于离散对数的困难性,二是该方案使用乘法群,从而可以提前计算了一些参数,减小了证明者实时计算开销,特别适合 ...
- 简易无接触温度测量与身份识别装置【2020年大学生电子设计竞赛F题】
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达 赛题分析 通过对赛题的分析研究,完成题目的要求需要满足以下几点功能要求: (1)非接触 ...
- 【转】你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
电脑出现"你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问."的原因是系统错误导致的,具体解决两个方案 一.修改Lanman WorkStation 1.首先 ...
- 2016年安全身份识别主流趋势
安全身份识别解决方案商HID Global通过从不同行业市场的重要客户那里所获得的深刻洞察,以及公司最新解决方案在前瞻性合作伙伴和全球各地的终端用户中进行的试点项目与正式部署情况,确定了2016年最值 ...
最新文章
- 图像纹理合成及纹理传输算法学习(附源码)。
- ac9560不支持承载_IPFS 最新进展:0.5 版本改进较大,已出现系统级支持 | 火星号精选...
- ASP.NET MVC学习:MVC 特性作用(二)
- maven 多项目搭建
- 学会这两招,快速突出图表重点,让老板眼前一亮
- LINUX的简单命令
- vb.net 画多个矩形_电气原理图和接线图识图方法,电气接线图怎么画?
- 双层PDF的制作——使用PDF4NET 3.3.6 实现
- 就业swot分析计算机,程序员应聘SWOT分析法
- idea 安装uml 画图工具
- lidar/imu组合slam相关文章
- 点集求最小包围盒OBB算法
- node.js打包失败_与专家讨论Node.js-全部失败
- 迁移学习与小样本学习
- 何为企业?何以“大而能用,大而有当”?|一点财经
- 微型计算机基础理论——计算机中的数制及其应用
- 3D视觉学习计划之PCL库的基础知识
- 小程序加密解密完成版
- 基于Android的本地电子书阅读器的设计与实现Ebook(1)
- 华为认证网络工程师含金量高吗