使用指南

1.SDK 目录结构

目录

2.将SDK集成到开发环境

使用 SDK 前,首先需要将其集成到您的开发环境中。

项目的开发环境需要在 Xcode 6.0版本及以上,运行环境需要 iOS7.0 及以上,支持机型 iPhone 4s以上。下文将说明开发中需要的详细操作。

2.1 配置开发环境

2.1.1 导入SDK包

将ORCLib文件夹(包含include、lib、model) copy 一份到项目工程目录下,拖拽到 xcode 打开的工程中,勾选 copy,点击 Finish。

注:本 SDK 不支持 CocoaPods 的方式导入。

示例介绍图

2.1.2 编译选项设置

2.1.2.1 需要添加 Xcode 链接器参数:-ObjC 和 -lstdc++。

添加 -ObjC 参数后链接器可以把静态库中所有的 Objective-C 类和分类都加载到最后的可执行文件中。

添加 -lstdc++ 参数是由于我们的静态库中需要 c++ 标准库支持。

添加方法:

TARGETS -> Build Settings -> Linking -> Other Linker Flags 中添加 -lstdc++ 和 -ObjC 。

示例介绍图

2.1.2.2 需要添加的编译链接库

示例介绍图

2.1.2.3 如果使用的开发工具是Xcode 7.0以上版本,需要手动关闭Bitcode。

步骤:

TARGETS -> BuildSettings -> Enable Bitcode 设置为 NO。

示例介绍图

2.2 配置 APP_IDAPP_SECRET 和解析地址

在使用SDK之前,需要先配置好您的 APP_ID 和 APP_SECRET。

请参考下面的代码:

2.2.1 在LFFrontPageViewController.m中设置 id 和 secret

#error 请删除此行, 在线版填充api_id、api_secret、urlString值
    NSString *api_id = @"";
    NSString *api_secret = @"";
    NSString *urlString = @"";

2.3在Xcode8上调试iOS9以上系统时,调用相机功能时,在info.plist文件下添加隐私权限。

 <key>NSCameraUsageDescription</key>
 <string>cameraDesciption</string

2.4添加https访问权限。

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

3.证书动态更新使用指南

3.1.说明

  • OCR5.5以上版本支持动态传入License文件路径、支持自动更新;
  • 目前SDK不提供开放下载,获取SDK包请联系market@linkface.cn;
  • 最新的License文件需向Linkface申请。
  • 3.2 动态更新License文件集成步骤

  • 注:此部分代码举例银行卡扫描SDK,身份证扫描SDK同理。
  • 3.2.1 传入License文件路径

    在- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(nullable NSDictionary )launchOptions;方法中调用,传入license文件路径

    //设置动态更新license文件
        //获取沙盒document; 
        NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
        // 获取Bundle中的license文件路径
        NSString *pathLicense = [[NSBundle mainBundle] pathForResource:@"LinkfaceID" ofType:@"lic"];
        [LFUpDateLicenseManger loadLicensePath:pathLicense cachePath:[NSString stringWithFormat:@"%@/ocrCacae",docDir]];
    

    3.2.2、引入文件

    引入更新文件管理类UPLicense文件夹,并修引用类,如果你是银行卡识别则引入LFBankCard.h文件,否则LFIdCard.h类;修改对应的方法即可。

    3.2.3、说明

    在LFUpDateLicenseManger.m文件中,首先判断沙盒中的license文件是否存在,如果存在则去验证license文件是否可用,不可用下载,可用继续后边流程;如果沙盒中的license文件不存在,则去取bundle中文件,然后验证是否可用,不可用去下载。代码事例:

    // 是否存在
        if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) {
        // 沙盒文件存在,取沙盒文件
            [LFBankCard loadLicensePath:cachePath];
        } else {
        // 沙盒文件不存在,取bundle中文件
            [LFBankCard loadLicensePath:licensePath];
        }
    
        // 判断文件是否可用,截止日期和是否可用。
        if (([LFBankCard getRemainingTime] < LFMaxRemainingTime) || ![LFBankCard isLicenseValid]) {
            // 不可用下载更新文件
            [self updateLicense]
            };
    
    注意:截止时间宏LFMaxRemainingTime 和 url宏LFLicenseJsonUrlString 用户按需自行配置

    3.2.4 下载文件

    下载文件,获取license文件对应的json,json返回内容事例见3.3.2;该URL为定制方式,获取url请联系客服;详见Demo。

    // 获取对用的json
    - (void)updateLicense;
    // 通过获取的json中对应的URL下载license文件,下载完之后保存沙盒中;
    - (void)downloadlicenseFile:(NSString *)url;
    

    3.2.5 检验文件

    MD5验证下载后的license文件正确性.LFEncryption.h文件中

    + (NSString *)MD5ForLower32Bate:(NSString *)str;
    

    3.2.6 保存文件

    + (BOOL)addLicCacheWithLicContent:(NSString *)licContent licCachePath:(NSString *)licCachePath
    

    3.3、下载和接口说明

    3.3.1 下载时序图

    示例介绍图

    3.3.2获取license文件URL

    请求URL:该URL为定制URL,获取方式请联系market@linkface.cn

    请求方式:

    GET 方式
    

    请求参数:

    返回参数:

    字段名 说明
    md5 由lic文件得到的MD5,32位小写
    start_time license文件有效期起始时间,Unix时间戳格式
    expired_time license文件有效期结束时间,Unix时间戳格式
    lic_url license文件下载地址

    出参json示例:

    {
     "md5": "qwertyhgfr567u8i987yt65rfghjkiuy",
     "start_time": 1517500800,
     "expired_time": 1546185600,
     "lic_url": "http://www.linkface.com/license_url"
    }
    

    3.3.3、通过上一步请求回来的json中获取到的lic_url下载license文件

    请求URL

    //该URL为上一接口内返回的lic_url
    http://www.linkface.com/license_url
    

    请求方式:

    GET方式
    

    请求参数:

    返回参数:

    字段名 说明
    license license文件

    3.4、使用步骤

    1. 开发人员根据获取到的License文件信息Json中的lic_url下载相应License文件;
    2. 对该License文件做MD5得到32位小写字符串与License信息的json中md5字段的值进行比对,确保md5文件未经篡改;
    3. 将下载后的正确文件保存到本地用户提供的路径下;

    3.5、其他

    1、Demo中提供该版本的license文件更新机制代码。仅为有需求的用户提供参考.

    4.同时集成活体 SDK和OCR SDK动态更新license文件注意事项

    如果你同时集成了活体_SDK和OCR_SDK,在动态更新license文件时只需更新一个license文件即可。
    具体说明如下:

    4.1 获取license文件

       在AppDelegate的didFinishLaunchingWithOptions 方法中
     //设置动态更新license文件
        NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
        // 获取你的工程里面的license文件,名字可以自定义;
        NSString *pathLicense = [[NSBundle mainBundle] pathForResource:@"这里填写工程里的license文件名称" ofType:@"lic"];
        [LFUpDateLicenseManger loadLicensePath:pathLicense cachePath:[NSString stringWithFormat:@"%@/ocrCacae",docDir]];
    

    4.2 引入UpLicense文件夹

    LFUpDateLicenseManger.m 中
    // 更新license文件 只需要做一次, 即在这三个类中(LFBankCard,LFIDCard,LFLivenessDetector), 选择一个,这里选用LFBankCard类更新lincense文件了,作为示例;
    // 首先去判断沙盒中是否有license文件,如果存在就把路径保存进入SDK中,
    if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) {
            [LFBankCard loadLicensePath:cachePath];
        } else {
        // 如果沙盒中不存在,则保存工程里的license文件路径进入SDK中
            [LFBankCard loadLicensePath:licensePath];
        }
        //判断license文件是否可用,不可用则去下载,下载完成之后保存路径
        if (([LFBankCard getRemainingTime] < LFMaxRemainingTime) || ![LFBankCard isLicenseValid]) [self updateLicense];
    

    4.3 下载license文件完成保存lincense文件

    - (void)downloadlicenseFile:(NSString *)url {
    
        [LFLoadLicense downLoadLicenseUrl:url completeBlock:^(NSString * _Nullable license, NSError * _Nullable error) {
            if (error == nil){
                if ([self checkMd5String:license]){
                    //校验成功
                    if ([LFLicenseCache addLicCacheWithLicContent:license licCachePath:self.cachePath]){
                    // 保存license文件
                        [LFBankCard loadLicensePath:self.cachePath];
                    }
                }
            }
        }];
    }
    

    4.4 初始化你的SDK

    在初始化时分别调用初始化的各自初始化方法即可;这里LFBankCrad举例:

    LFBankCard *bankcard = [[LFBankCard alloc] initWithModelPath:modelPath extraPath:extraPath];
    

    4.5 其他

    1、如果你集成了其中一个SDK,并且完成了动态更新机制,SDK正常运行,再添加另外一个SDK时,如果你不想修改动态更新的逻辑代码;则你不需要关心这部分代码;正常初始化新添加SDK即可。

    results matching ""

      No results matching ""