集成指南

1.SDK目录结构

我们提供的Demo示例结构目录。 目录 目录

1.1 运行Demo

点击项目即可运行

1.2 配置下载天数和授权文件下载地址

接下来 运行即可

2.将SDK集成到开发环境

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

2.1 配置开发环境

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

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

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

添加方法:

TARGETS -> Build Settings -> Linking -> Other Linker Flags 中添加 -lstdc++ 和 -ObjC 。 示例介绍图 示例介绍图

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

步骤:

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

示例介绍图

2.1.3.添加相关引用库。

步骤:

TARGETS ->Build Phases中添加相关引用库 其中libLFLivenessDetector.a 是我们的静态库。 其他的为系统提供的库文件,按照下图中注意添加即可, 点击加号搜索相应的系统库 示例介绍图

示例介绍图

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

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

相机权限

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

2.2 将SDK集成到项目中

2.2.1 将demo中指定的文件夹(libLFMultipleLiveness)加入到已经配置好环境的xcode项目(以下称项目)中

打开我们提供的Demo,我们的Demo提供的是重UI,高度自定义UI的用户请参考API接口;LFLivenessDetector
接下来我们看如何将代码集成到环境中。
1、打开我们提给您的Demo工程文件夹,你将看到如下的结构 示例介绍图

将选中的文件夹添加入项目中,选中如图中三项 示例介绍图 2、将自动更新文件夹添加入项目,同第一步,选中三项。 示例介绍图 我们已经把SDK代码添加入项目了编译一下,看下有没有报错。如果报错的话请参考2.1详细配置信息。
3、添加自动更新授权文件代码,这里的自动更新授权文件是非阻塞,如果您需要确保自动更新文件完成 在- (BOOL)application:(UIApplication)applicationdidFinishLaunchingWithOptions:(nullable NSDictionary )launchOptions; 方法中调用,传入license文件路径,详细请参考:License文件动态更新使用指南 示例介绍图

 //设置动态更新license文件
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *pathLicense = [[NSBundle mainBundle] pathForResource:@"LinkfaceID" ofType:@"lic"];
    [LFUpDateLicenseManger loadLicensePath:pathLicense cachePath:[NSString stringWithFormat:@"%@/LinkfaceIDCacae",docDir]];

4、在项目中创建活体检测按钮 示例介绍图

  // 创建按钮开始活体检测
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 150, 50)];
    [btn setTitle:@"开始活体检测" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor grayColor]];
    [self.view addSubview:btn];
    btn.center = self.view.center;

    [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];

5、实现按钮的点击方法,这里在按钮的方法里实现了基本参数配置和初始化带有UI界面的活体检测控制器。 示例介绍图

- (void)btnClick{
    // 设置输出模式
    NSString *outType = @"video";
    // 设置难易程度,这里设置正常模式
    LivefaceComplexity complexity = LIVE_COMPLEXITY_NORMAL;
    // 设置动作序列,BLINK,MOUTH,NOD,YAW
    NSArray *sequence = @[@"BLINK",@"MOUTH",@"NOD",@"YAW"];
    NSDictionary *dict =@{@"sequence":sequence,
                          @"outType":outType,
                          @"Complexity":@(complexity)
                          };
    // 转JSON
    NSString *strJson = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding];

    LFMultipleLivenessController *multipleLiveness = [[LFMultipleLivenessController alloc] init];
    self.lfLienessVc = multipleLiveness;
    self.lfLienessVc.delegate = self;
    // 是否开启提示音,设置开启。
    [self.lfLienessVc setVoicePromptOn:YES];
    // 设置json
   BOOL isJsonOk =  [self.lfLienessVc setJsonCommand:strJson];

    [self presentViewController:self.lfLienessVc animated:YES completion:^{
        [self.lfLienessVc restart];
    }];

}

6、实现LFMultipleLivenessDelegate代理方法 在代理方法中有开始回调、成功回调、失败回调、取消回调。
示例介绍图 到这里你已经完成把SDK添加入新项目的的全部过程了。如果你想详细的了解实现逻辑请参考我们提供的Demo 文件

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文件 OCR保存
                        [LFBankCard loadLicensePath:self.cachePath];
                        // 活体保存
                        [LFLivenessDetector 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 ""