快速入门
SDK工程结构
aip-ocr-ios-sdk-$version
lib // 需要引用的框架
|-AipBase.framework // 鉴权等基础框架包,必须引入
|-AipOcrSdk.framework // OCR服务,UI框架包,必须引入
|-IdcardQuality.framework // 身份证本地质量控制框架包,按需引入
AipOcrDemo // Demo 工程
AipOcrSdk // AipOcrSdk.framework源码
AipOcrDemo工程Link了AipBase.framework、AipOcrSdk.framework、IdcardQuality.framework三个框架。
AipOcrSdk工程Link了AipBase.framework、IdcardQuality.framework两个框架
注意 !!! 以上框架为Dynamic框架,请务必使用Embedded Binary方式嵌入!!!
其中
- AipBase.framework中包含了鉴权相关服务,必须引入。
- AipOcrSdk.framework中包含OCR服务、UI,必须引入。
- IdcardQuality.framework包含了身份证本地质量控制的功能,如果需要使用身份证扫描识别功能,需要引入。
- AipOcrSdk目录下的工程为AipOcrSdk.framework的源码;开发者可自行根据需求修改并引用。
如何运行Demo工程
iOS SDK提供了一个可快速运行的Demo工程,建议首先运行以下Demo工程,其中包含了使用SDK的主要步骤。
运行步骤如下:
- 在官网下载iOS SDK 压缩包
- 解压缩,双击打开 AipOcrDemo/AipOcrDemo.xcodeproj
- 在管理控制台中新建文字识别应用,配置BundleId为AipOcrDemo的BunldeId(默认为
com.baidu.AipOcrDemo
) - 在AipOcrDemo工程中
AipOcrDemo/ViewController.m
viewDidLoad
方法中配置相应管理控制台中新建的应用的Api Key, Secret Key - 运行AipOcrDemo
- 上传至AppStore前,必须使用lipo命令移除模拟器架构。请参考 FAQ-2。
身份验证与安全
百度AIP开放平台使用OAuth2.0授权调用开放API,调用API时必须在URL中带上accesss_token参数。AccessToken可用AK/SK或者授权文件的方式获得。
OCR iOS SDK提供了以下两种AccessToken管理方法。
API Key / Secret Key
此种身份验证方案使用AK/SK获得AccessToken,缓存在本地。
虽然SDK对网络传输的敏感数据进行了二次加密,但由于AK/SK是明文填写在代码中,在移动设备中可能会存在AK/SK被盗取的风险。有安全考虑的开发者可使用第二种授权方案。
使用步骤:
- 在管理控制台中配置OCR应用
-
复制应用的Api Key(简称AK) 和 Secret Key(简称SK),初始化
AipOcrService
单例:[[AipOcrService shardService] authWithAK:@"Api Key" andSK:@"Secret Key"];
授权文件(安全模式)
此种身份验证方案使用授权文件获得AccessToken,缓存在本地。建议有安全考虑的开发者使用此种身份验证方式。
在您的移动APP分发出去之后,APP存在被反编译的可能,所以直接将AK / SK 置于APP源码之中,存在被盗取的风险。采用授权文件的身份验证方法,可有效保护AK/SK在移动设备中的安全。攻击者即使拦截了流量,盗取了授权文件,也难以盗用您的配额。
使用步骤:
- 在官网中配置应用
- 下载对应应用的授权文件(默认名字为aip.license)
- 将授权文件添加至XCode工程(配置为资源并拷贝,Target -> Build Phases -> Copy Bundle Resource 中添加该文件)
-
读取授权文件原始字节,
NSData
格式,初始化AipOcrService
单例:// 示例 // 若未添加至主工程,则[NSBundle mainBundle]修改为对应bundle NSString licenseFile = [[NSBundle mainBundle] pathForResource:@"aip" ofType:@"license"]; NSData licenseFileData = [NSData dataWithContentsOfFile:licenseFile]; [[AipOcrService shardService] authWithLicenseFileData:licenseFileData];