集成指南

1.SDK目录结构

目录

2.将SDK集成到开发环境

使用 SDK 前,首先需要将其集成到您的开发环境中。项目的开发环境需要在 Xcode 6.0版本及以上,运行环境需要 iOS7.0 及以上,下文将说明开发中需要的详细操作。

2.1 配置开发环境

2.1.1 导入SDK包

将libLFMultipleLiveness文件夹(包含 libLFLivenessDetector.a、LinkfaceID.lic、lf_liveness_resource.bundle、.h、.m等) copy 一份到项目工程目录下,拖拽到 xcode 打开的工程中,勾选 copy,点击 Finish 按钮。

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

示例介绍图

2.2 编译选项设置

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

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

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

添加方法:

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

示例介绍图

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

步骤:

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

示例介绍图

2.2.3.添加相关引用库。

步骤:

TARGETS ->Build Phases中添加相关引用库

示例介绍图

2.2.4.在Xcode8上调试iOS10系统时,调用相机功能时,在info.plist文件下添加权限。

需要在info.plist文件下添加相关的权限。

相机权限

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

3.Lisense文件说明

我们当前版本的SDK是通过 License文件进行 BundleID 绑定校验授权。

4.License文件动态更新使用指南

4.1.说明

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

    4.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]];
    

    4.2.2、引入文件

    引入更新文件管理类UPLicense文件夹,并修引用类,引入LFLivenessDetector.h文件。

    4.2.3、说明

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

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

    4.2.4 下载文件

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

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

    4.2.5 检验文件

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

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

    4.2.6 保存文件

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

    4.3、下载和接口说明

    4.3.1 下载时序图

    示例介绍图

    4.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"
    }
    

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

    请求URL

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

    请求方式:

    GET方式
    

    请求参数:

    返回参数:

    字段名 说明
    license license文件

    4.4、使用步骤

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

    4.5、其他

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

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

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

    5.1 获取lincense文件

       在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]];
    

    5.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];
    

    5.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];
                    }
                }
            }
        }];
    }
    

    5.4 初始化你的SDK

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

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

    5.5 其他

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

    results matching ""

      No results matching ""