本文介绍了获取无线认证SDK后,将认证SDK集成到您的iOS应用中的操作方法。

前提条件

获取正确的iOS SDK。
  • iOS SDK与BundleID绑定。BundleID不同,则需要在管理控制台上重新下载SDK。
  • 如果您使用的是3.0.0之前的老版本SDK,您可以将其升级到3.0.0版本,具体操作请参见iOS SDK升级指南(3.0.0)

在工程中导入SDK

  1. 解压无线认证SDK,并将以下iOS的依赖包引入到您的项目工程中。导入时必须勾选Copy items if needed
    AliAPMInterface.framework
    AliReachability.framework
    AliyunOSSiOS.framework
    RPSDK.framework
    SecurityGuardSDK.framework
    SGMain.framework
    SGSecurityBody.framework
    TBJSONModel.framework
    TScheduleProtocol.framework
    WindmillBridge.framework
    WindmillWeaver.framework
    WindMix.framework
    WindVane.framework
    WindVaneBasic.framework
    WindVaneCore.framework
    说明 集成实人认证SDK后,应用大小的增量为3.41Mb。
  2. 在您的工程中添加以下实人认证需要的系统依赖库。
    CoreMotion.framework
    Libc++.tbd
    Libresolv.tbd
    Libz.tbd
    导入的依赖包
    完成以上两个步骤后,您可以在Build Phases > Link Binary With Libraries看到导入的依赖包。如果未看到依赖包,说明导入过程中出现问题,请确认将所有依赖包拷贝到工程项目,并勾选正确的应用目标。
  3. 导入以下资源文件。导入时必须勾选Copy items if needed
    yw_1222_0769.jpg
    RPSDK.bundle
    signaturepic
    导入完成后,您可以在Build Phases > Copy Bundle Resources看到资源文件。如果未看到资源文件,则说明导入过程中出现问题,请确认将所有资源文件拷贝到工程项目,并勾选正确应用目标。
  4. 修改编译选项。在工程的Build Settings > Other Linker Flags选项中添加-ObjCObjC

使用SDK

说明 调用实人认证客户端前,您必须先通过服务端调用DescribeVerifyToken获取verifyToken

方式一:start

默认推荐使用此方式调用实人认证,支持RPBasicRPBioOnlyRPBioIDRPManualFDBioOnlyFVBioOnly认证方案。该接口会以加载H5的方式显示页面,包含身份证件拍摄等其他步骤。如果需要在控制台配置使用引导页、授权页、结果页等,则只能使用此方式接入。

  • Objective-C
    #if TARGET_OS_IPHONE // 由于安全原因,实人认证不支持模拟器调试
    #import <RPSDK/RPSDK.h>
    #endif
    
    #if TARGET_OS_IPHONE
    [RPSDK startWithVerifyToken:verifyToken
                 viewController:self
                     completion:^(RPResult * _Nonnull result) {
        // 建议接入方调用实人认证服务端接口 DescribeVerifyResult,
        // 来获取最终的认证状态,并以此为准进行业务上的判断和处理。
        NSLog(@"实人认证结果:%@", result);
        switch (result.state) {
            case RPStatePass:
                // 认证通过。
                break;
            case RPStateFail:
                // 认证不通过。
                break;
            case RPStateNotVerify:
                // 未认证。
                // 通常是用户主动退出或者姓名身份证号实名校验不匹配等原因导致。
                // 具体原因可通过 result.errorCode 和 result.message 来区分(详见错误码说明)。
                break;
        }           
    }];
    #endif
  • Swift
    #if targetEnvironment(simulator)
    // 由于安全原因,实人认证不支持模拟器调试
    #else
    import RPSDK
    #endif
    
    #if targetEnvironment(simulator)
    // 由于安全原因,实人认证不支持模拟器调试
    #else
    RPSDK.start(withVerifyToken: verifyToken, viewController: self) { result in
        // 建议接入方调用实人认证服务端接口 DescribeVerifyResult,
        // 来获取最终的认证状态,并以此为准进行业务上的判断和处理。
        print("实人认证结果:", result);
        switch result.state {
        case .pass:
            // 认证通过。
            break
        case .fail:
            // 认证不通过。
            break
        case .notVerify:
            // 未认证。
            // 通常是用户主动退出或者姓名身份证号实名校验不匹配等原因导致。
            // 具体原因可通过 result.errorCode 和 result.message 来区分(详见错误码说明)。
            break
        default:
            break
        }
    }
    #endif
方式二:startByNative

如果您选择的认证方案只包含活体检测步骤,例如RPBioOnlyFDBioOnlyFVBioOnly,则可以考虑使用此方式接入。对应的认证方案不支持在控制台配置引导页、授权页、结果页等,需接入方自行处理。

  • Objective-C
    #if TARGET_OS_IPHONE
    [RPSDK startByNativeWithVerifyToken:verifyToken
                         viewController:self
                             completion:^(RPResult * _Nonnull result) {
        // 建议接入方调用实人认证服务端接口 DescribeVerifyResult,
        // 来获取最终的认证状态,并以此为准进行业务上的判断和处理。
        NSLog(@"实人认证结果:%@", result);
        switch (result.state) {
            case RPStatePass:
                // 认证通过。
                break;
            case RPStateFail:
                // 认证不通过。
                break;
            case RPStateNotVerify:
                // 未认证。
                // 通常是用户主动退出或者姓名身份证号实名校验不匹配等原因导致。
                // 具体原因可通过 result.errorCode 和 result.message 来区分(详见错误码说明)。
                break;
        }
    }];
    #endif
  • Swift
    #if targetEnvironment(simulator)
    // 由于安全原因,实人认证不支持模拟器调试
    #else
    import RPSDK
    #endif
    
    #if targetEnvironment(simulator)
    // 由于安全原因,实人认证不支持模拟器调试
    #else
    RPSDK.startByNative(withVerifyToken: verifyToken, viewController: self) { result in
        // 建议接入方调用实人认证服务端接口 DescribeVerifyResult,
        // 来获取最终的认证状态,并以此为准进行业务上的判断和处理。
        print("实人认证结果:", result);
        switch result.state {
        case .pass:
            // 认证通过。
            break
        case .fail:
            // 认证不通过。
            break
        case .notVerify:
            // 未认证。
            // 通常是用户主动退出或者姓名身份证号实名校验不匹配等原因导致。
            // 具体原因可通过 result.errorCode 和 result.message 来区分(详见错误码说明)。
            break
        default:
            break
        }
    }
    #endif

错误码说明

在实人认证completion的RPResult中可获取到认证状态和认证失败错误码。具体说明请参见下表。

state errorCode errorCode 释义
RPStatePass 1 认证通过。
RPStateFail 2~12 表示认证不通过,具体的不通过原因可以查看服务端的查询认证结果(DescribeVerifyResult)接口文档中认证状态的说明。
RPStateNotVerify -2 未完成认证,原因是:网络请求失败,场景与调用接口不符或者接入错误(请参考 result.message)。
-1 未完成认证,原因是:用户在认证过程中主动退出。
3001 未完成认证,原因是:认证token无效或已过期。
3101 未完成认证,原因是:用户姓名身份证实名校验不匹配。
3102 未完成认证,原因是:实名校验身份证号不存在。
3103 未完成认证,原因是:实名校验身份证号不合法。
3104 未完成认证,原因是:认证已通过,重复提交。
3204 未完成认证,原因是:非本人操作。
3206 未完成认证,原因是:非本人操作。
3208 未完成认证,原因是:公安网无底照。

常见问题

请参见iOS集成常见问题