Android SDK 接入指南

1.产品功能说明

本SDK为App实现机主身份验证功能,包含运营商短信验证,人脸识别以及其他方式。 它减少app开发者的在客户身份验证过程中的难度与费用,减少用户操作流程, 提升app用户的使用体验,为APP开发提供极大的便利。

2. SDK 包含内容

  1. 复制sai_sdk_1.2.6.jar(或aar文件)到工程libs/目录下;
  2.SAI_demo,一个完整的Android 项目,演示了认证的基本用法,可供参考;
  3.Android SDK集成指南;
  4.AndroidManifest.xml样例文件。

SDK 集成步骤

1. 创建开发者账号

访问秒验认证官网: 秒验认证官网


注册登录后并完成实名认证

2. 在官网上创建应用

按照官网要求填入项目信息,获得对应的AppId和AppSecret等;

3. 导入SDK开发包到你的应用程序项目

jar包集成方式:

1.在Eclipse/AS中建立你的工程。

2. 将 *.jar 拷贝到工程的libs目录下,如没有该目录,可新建。

3. 将sdk所需要的资源文件(anim, drawable, drawable-xxhdpi, layout, values文件)从demo工程res-umc目录下的文件添加到项目工程中。

implementation files('libs/sai_sdk_version.jar')

aar包集成方式:

1.在AS中建立你的工程。

2.将 *.aar 拷贝到工程的libs目录下,如没有该目录,可新建。

                repositories {
                flatDir {
                dirs 'libs'
                }
                }
                dependencies {
                ....
                implementation(name: 'sai_sdk_version', ext: 'aar')
                ....
                }
                            

4. 编译版本配置

minSdkVersion:15

5. 配置AndroidManifest.xml

为保证SDK 认证功能够提供更加可靠的验证功能,需要一些权限来获取手机的设备信息。在SDK压缩包里的AndroidManifest.xml样例文件中,列出了验证中使用到的权限。为了提高验证的可靠性,请开发者在项目的AndroidManifest.xml中添加样例文件中列出的权限。

            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
            <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

在application中配置activity.

             <!--  移动、电信授权页面 -->
            <activity
                    android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
                    android:configChanges="orientation|keyboardHidden|screenSize"
                    android:screenOrientation="portrait"
                    android:launchMode="singleTop">
            </activity>
            <!--  联通授权页面 -->
            <activity
                    android:name="com.unicom.xiaowo.login.LoginActivity"
                    android:configChanges="orientation|keyboardHidden|screenSize"
                    android:screenOrientation="portrait">
            </activity>
                            

6. 混肴配置

             -keepattributes Signature

             # SAI SDK基本功能
             -dontwarn org.ox.**
             -keep class org.ox.** { *; }
             # 移动一键登录功能
             -dontwarn com.cmic.sso.sdk.**
             -keep class com.cmic.sso.sdk.**{*; }
             # 联通一键登录功能
             -dontwarn com.unicom.xiaowo.login.**
             -keep class com.unicom.xiaowo.login.**{*; }

7. 参数格式

请求参数 OxRequestParam

变量名 类型 描述
actionType String 操作类型
strData string JSON格式请求参数
binData byte[] Byte[] 文件数据流
extra Object 自定义参数,不参与请求。

响应结果 OxRequestResult

变量名 类型 描述
actionType String 操作类型
strData string 响应结果信息JSON格式
param OxRequestParam 请求时的数据

API 接口列表

SDK提供的API 接口,都集中在org.ox.face.OxClientEntry 类中。

1. 初始化

只有SDK初始化成功才能调用SDK 请求验证接口方法。SDK初始化,调用OxClientEntry中提供的init方法完成。

结果回调至pNotifier的 void onActionResult(OxRequestResult result);方法。

原型方法

        /**
         *  SDK初始化 请勿多次调用
         * @param context     上下文
         * @param param       OxRequestParam 类型数据
         * @param pINotifier  回调对象
         */
        public static void init(Context context, OxRequestParam param, OxNotifier pNotifier);

初始化调用方法实例

OxClientEntry.init(mContext, param, oxNotifier);

param 参数说明(格式JSON)

参数名称 参数类型 必填 描述
actionType String 响应类型:init_sdk
strData app_id string 官网注册获取的appId
app_secret string 官网注册获取的appSecret
options String 可选参数,JSON 格式
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:init_sdk
strData code string 响应码 :“00000”成功
msg String 响应信息
param OxRequestParam 请求时的对象

strData格式

{"code":"00000","msg":"init success"}

2. 请求入口

SDK集成的功能:一点算法校验、发送短信验证、短信校验、人脸采集、人脸识别、人脸采集状态、一键登验证功能,都可以调用OxClientEntry中的requestAction接口完成操作;

        /*** 服务操作的请求入口方法**/
        public static boolean requestAction(OxRequestParam param);
OxClientEntry中其它方法
        /**
          * 设置调试模式。
          * @param isDebug 是否为debug模式
          */
          public static void setDebugMode(boolean isDebug);

          /** * @param isCatchCrash 是否捕获异常*/
         public static void setCatchCrashMode(boolean isCatchCrash);

         /**
           * 需要权限:READ_PHONE_STATE, ACCESS_NETWORK_STATE
           * operatorType 获取网络运营商 1.移动流量 2.联通流量网络 3.电信流量网络
           *  networkType 网络状态:0未知;1流量 2 wifi;3 数据流量+wifi
           * return JSON
           */
         public static String getNetworkType();

         /**
          *  设置移动一键登录授权页面UI 风格配置
          * @param config Config
          */
        public static void setLoginThemeConfig(OxLoginThemeConfig config) ;

        /**获取移动登录UI配置信息*/
        public static OxLoginThemeConfig getLoginThemeConfig();

        /**
         *  移动自定义view添加到title 父视图组
         * @param name viewSetting name
         * @param viewSetting viewSetting
         */
        public static void addCustomViewSettingToTitle(String name, OxLoginCustomViewSetting viewSetting);

        /**
         * 移动自定义view添加到body 父视图组
         * @param name viewSetting name
         * @param viewSetting viewSetting
         */
        public static void addCustomViewSettingToBody(String name, OxLoginCustomViewSetting viewSetting);

        /**
         * @return 移动 title 父视图组中的 OxLoginCustomViewSetting
         */
        public static HashMap<String, OxLoginCustomViewSetting> getTitleCustomViewSettingMap();

        /**
         * @return 移动 body 父视图组中的 OxLoginCustomViewSetting
         */
        public static HashMap<String, OxLoginCustomViewSetting> getBodyCustomViewSettingMap();

        /**
         * 添加联通自定义view 、控件的点击事件
         * @param vId 控件Id
         * @param clickListener 控件绑定的事件
         */
        public static void setCuccCustomClickListener(String vId, CustomOnclickListener clickListener);

        /*** 结束授权页面*/     
        public static void finishAuthActivity();
         
         /**  注销SDK的方法 */
         public static void deinit();

注意:有关一键验证授权页设置方法请参考demoSDK中《一键验证能力使用文档》。

3. 回调出口

新建一个类并实现OxNotifier接口。示例如下:(注:接口中的方法运行在子线程中).

        package org.ox.face;

        import org.ox.base.OxRequestResult;

        public interface OxNotifier {
           void onActionResult(OxRequestResult result);
        } 

接口调用指南

1. 短信验证

短信验证由客户端发起,收到短信验证码后校验短信验证码是否正确。

通过开发者身份验证后,当第一次使用一点算法验证或者一点算法验证失败后,需要通过传统短信进行机主身份验证。将短信验证码和手机号码填入,进行验证。

请求发送短信验证调用此方法,会向传入的手机号对应的手机发送一条短信(调用此接口会消耗验证次数或余额,优先消耗验证次数),短信验证码一分钟内只能发送一次,一分钟内多次调用会导致失败。

1.1. 请求短信验证码

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:verify_by_sms_start
strData tel string 手机号
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_sms_start
strData tel string 手机号
code string 响应码 :“00000”成功
msg string 响应信息
verify_order_id string 平台订单id
param OxRequestParam 请求对象数据

strData格式

成功:{"code":"00000","msg":"OK","verify_order_id":"sms15374188678739721"}
失败:{"code":"10001","msg":"params error"}

1.2. 校验短信验证码

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:verify_by_sms_check
strData tel string 手机号
sms_code string 短信验证码
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_sms_check
strData code string 响应码 :“00000”成功
msg string 响应信息
verify_token string 二次验证token
param OxRequestParam 请求对象数据

strData格式

成功:{"code":"00000","msg":"OK","verify_token":"724AC5CFABF7F31****B26922F33CF3"}
失败:{"code":"10031","msg":"verify failed"}

2. 绑定手机号

对信任的用户,调用此接口来绑定手机号,绑定手机号后,如果再调一点算法校验接口就可直接通过。

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:bind_tel
strData tel string 手机号
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:bind_tel
strData code string 响应码 :“00000”成功
msg string 响应信息
param OxRequestParam 请求对象数据

strData格式

成功:{"action_type" :"bind_tel","code":"00000","msg":"OK"}
失败:{"code":"10001","msg":"DEV_PHONE_ERROR"}

3. 一点算法验证

通过开发者身份验证后,当需要验证机主身份时,可调用如下代码进行一点算法验证: 结果为通过或者不通过(调用此接口会消耗验证次数或余额,优先消耗验证次数,调用异常不消耗)

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:verify_by_sai
strData tel string 手机号
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_sai
strData code string 响应码 :“00000”成功
msg string 响应信息
verify_order_id string 平台订单id
verify_token string 二次校验token
param OxRequestParam 请求对象数据

strData格式

成功:{"code":"00000","msg":"OK","verify_order_id":"SAO2***3774","verify_token":"***"}
失败:{"code":"10031","msg":"verify failed"}

4. 人脸识别

人脸识别功能含:采集人脸图片,校验人脸,校验是否已采集人脸三个功能。(图像文件大小超过 2 MB ,尺寸大小小于512*512);

4.1. 人脸图片采集与人脸识别

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型: verify_by_face_collect(采集) verify_by_face_check(识别)
strData image_type string path: 图片路径 image: 图片流 base64:
image string 当Image_type类型为 path时传入图片路径, base64时传入base64字符串。
binData Byte[] -- 当image_type=”image”时,需要将图片数据以流的方式赋值给binData。
extra Object 自定义参数,不参与请求。

人脸采集响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_face_collect
strData code string 响应码 :“00000”成功
msg string 响应信息
param OxRequestParam 请求对象数据

人脸识别响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_face_check
strData code string 响应码 :“00000”成功
msg string 响应信息
order_bill string 平台流水号
verify_token string 二次验证token
param OxRequestParam 请求对象数据

strData响应格式:

成功:{"code":"00000","msg":"OK","order_bill":"face_id15**20","verify_token":"6B****830C"}
失败:{"code":"10031","msg":"verify failed"}

4.2.人脸是否采集状态

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:face_img_is_collected
strData string -- 请求参数,格式JSON
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:face_img_is_collected
strData code string 响应码 :“00000”成功
msg string 响应信息
is_collect string 是否采集过(1表示已采集)
param OxRequestParam 请求对象数据

strData格式:

成功:{"code":"00000","is_collect":"1","msg":"OK"}
失败:{"code":"10031","msg":"verify failed"}

5. 一键登录

一键登录可快速获取当前手机号。更多移动互联网认证能力操作方法,请参考《一键验证能力使用文档》。

请求参数

参数名称 参数类型 必填 描述
actionType String 请求类型:verify_by_onekey
strData string -- 请求参数,格式JSON
extra Object 自定义参数,不参与请求。

响应信息

参数名称 参数类型 非空 描述
actionType String 响应类型:verify_by_onekey
strData code string 响应码 :“00000”成功
cm_code string 移动校验响应码
msg string 响应信息
tel string 本机手机号,成功时才能获取到
param OxRequestParam 请求对象数据

strData格式:

成功:{"code":"00000","tel":"1390****963","msg":"OK"}
失败:{"code":"10031","msg":"verify failed","cm_code":"103001"}

Android SDK 运行流程图

1. 一点算法验证——验证流程图

算法校验  判断设备信息是否与手机号关联,如果已关联算法校验直接通过,如果没有则不通过。


2. 短信校验码——验证流程图


3. 二次验证——验证流程图


4. SDK应用场景

4.1. 新用户注册

新用户注册的时候,需要进行运营商验证,校验成功后,该平台将自动帮您关联设备与手机号,下次调用一点算法验证进行登录,则不需要进行验证码校验,节省短信成本,节省流程,提升app用户的使用体验。

4.2. 登录场景

先进行一点算法校验,校验成功则允许用户登录,若校验失败,则需要进行运营商验证,运营商验证成功则允许用户登录。

4.3.老用户相关操作

对于您信任的老用户,如果想要在登录的时候,通过一点算法校验,而不进行运营商验证,则需要调用绑定手机号的接口,关联设备与手机号。

三分钟快速demo

1. Android demo 简介

1.1. Android demo 中实现了四个场景:

(1)用户绑定手机号

(2)一点算法验证

(3)发送短信及验证

(4)模拟修改密码场景

(5)一键登录场景

(6)人脸识别采集图片与校验

1.2. 应用启动需要进行SDK的初始化,SDK的初始化成功后才可进行操作


2. 登录官网并下载应用 Demo

    下载链接

3. 运行demo



将demo安装到手机。应用启动后自动进行SDK的初始化,后续操作基于SDK的初始化成功


3.1.【功能1】一点算法验证,在【功能:3绑定手机号】成功后的手机号,可通过一点算法验证(初步验证,需要开发者二次验证)。


3.2.【功能2】短信验证码功能:用户输入自己信任的手机号,2①功能获取短信验证码成功,获得验证码后,输入输入框中,点击2②进行验证,请求结果会已toast或者提示框提示。


3.3.【功能7】人脸识别校验,首次上传人脸图片。




3.4.人脸识别校验,成功与失败。




3.5.【功能5】一键登录。在自己的登录界面使用一键登录,授权后跳转到移动一键授权登录界面,确认登录成功后进入首页(展示页面)。




3.6.【功能6】这是一个修改密码场景的例子,通过一点算法验证就可进行下一步操作。

核心价值:传统修改密码场景的实现是通过短信验证来实现的,操作比较复杂,而且需要短信费用。修改密码场景只要用户绑定过手机号之后,修改密码时不用通过短信验证,改为通过一点算法验证。可简化修改密码的流程,节省开发者的费用,提升用户的体验。




若一点算法验证失败则走短信验证,验证成功后再进行下一步操作



产品功能说明

本SDK为App实现机主身份验证功能,包含运营商短信验证,人脸识别以及其他方式。 它减少app开发者的在客户身份验证过程中的难度与费用,减少用户操作流程, 提升app用户的使用体验,为APP开发提供极大的便利。

接入流程

1. 申请APPID

(1)注册并登录客户平台。

(2)进入“应用管理-创建应用”,完成产品创建,您将获得一串32位的AppID、AppSecret、MasterSecret。
如果您已经完成产品创建,请在如下位置获取应用唯一标识码:“应用管理-应用列表-详情”,用于集成到SDK中。
注:为了保证您的数据安全,请勿泄露您的应用唯一标识码。

2. 导入SDK

(1)前往SDK下载,下载对应SDK压缩包,解压到本地目录。

(2)将lib目录中OXSaiSDK.framework、OXSaiSDK.bundle、TYRZSDK.framework、TYRZResource.bundle、account_login_sdk_noui_core.framework导入到您的工程中。 导入方法:在工程目录结构中,右键选择Add->Existing Files...,选择OXSaiSDK.framework、OXSaiSDK.bundle、account_login_sdk_noui_core.framework、TYRZSDK.framework和TYRZResource.bundle(或将文件拖入Xcode工程目录结构中)文件,在弹出的界面中勾选 Copy items into destination group's folder(if needed),并确保Add To Targets勾选相应target。


项目配置

(1)添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
注:适配iOS 9以上系统的Http传输协议

(2)在Xcode中找到 TARGETS-->Build Setting-->Linking-->Other Linker Flags 在这选项中需要添加 -ObjC


接入方法说明

1. 初始化SDK

方法用途:

用于应用启动后,初始化SDK

使用方法:

+ (void) initWithParams: delegate:方法进行初始化

方法接口:

+ (void)initWithParams:(NSDictionary *)params delegate:(id< OXActionDelegate >)delegate;

参数说明:

字段 参数 必填 类型 说明
params appId app_id string 平台申请的appid
appSecret app_secret string 平台申请的app_secret
扩展参数 options json 扩展参数
代理 delegate id 代理

示例代码

         NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
            params[@"app_secret"] = 52BB77D02D******A0E141B82EED9;
            params[@"app_id"] = 17BC76520B598**33261898424ED21E5;
            params[@"options"] = @"{\"KEY\":\"VALUE\"}";
        [OXClientEntry initWithParams: params delegate:self];                  
                        

回调参数:

成功

字段 参数 类型 说明
返回码 code NString 返回码
请求类型 action_type NString 接口请求类型

失败

字段 参数 类型 说明
返回码 code NString 返回码
请求类型 action_type NString 接口请求类型

回调方法

        - (void)oxActionInitSdkResponse:(NSDictionary *)response{
            if ([response[@"code"] isEqualToString:@"00000"]) {
                 [[OXHUD sharedHUD]showMessage:@"初始化成功"];
            }else{
                [[OXHUD sharedHUD]showMessage:[NSString stringWithFormat:@"初始化失败 code:%@",response[@"code"]]];
         }}
                         
                        

2. 一键登录

方法用途:

无需填写手机号等其它操作,用户就可以一键登录

使用方法:

初始化成功后调用requestAction方法

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;

参数说明:

字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeVerifyByOnekey)
请求参数 params NSDictionary {"current_vc":UIViewController}

示例代码

        [OXClientEntry verifyFactor:OXActionTypeVerifyByOnekey params:nil];     
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
返回详情 msg NString 返回详情
手机号 tel NString 手机号码

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        - (void)onActionResult:(NSDictionary *)result{
            if([result [@"action_type"] integerValue]==OXActionTypeVerifyByOnekey){
           }

                        

3. SAI验证

方法用途:

通过SAI进行机主验证

使用方法:

初始化成功后调用requestAction方法

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary*)params;

参数说明:

字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeVerifyBySai)
请求参数 params NSDictionary SAI验证:{"tel":"手机号码"}

示例代码

        NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
        params[@"tel"] = @"15555555555";
        [OXClientEntry requestAction:OXActionTypeVerifyBySai params: params];                
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
订单ID verify_order_id NString 订单ID
verify_token verify_token NString 二次校验token
返回详情 msg NString 返回详情

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        - (void)onActionResult:(NSDictionary *)result{
               if([result[@"action_type"] integerValue]==OXActionTypeVerifyBySai){
                
        }
            ………………
           ………………
        }      
                        

4. 短信验证

方法用途:

通过短信进行机主验证

使用方法:

初始化成功后调用requestAction方法

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary*)params;

参数说明:


字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeVerifyBySmsStart、OXActionTypeVerifyBySmsCheck)
请求参数 params NSDictionary 短信开启:{"tel":"手机号码"}
短信验证:{"tel":"手机号码","sms_code":"短信验证码"}

示例代码

        NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
        params[@"tel"] = @"15555555555";
        [OXClientEntry requestAction:OXActionTypeVerifyBySai params: params];               
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
订单ID verify_order_id NString 订单ID(短信开启)
二次校验token verify_token NString 二次校验token(短信验证)
返回详情 msg NString 返回详情

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        - (void)onActionResult:(NSDictionary *)result{
               if([result[@"action_type"] integerValue]== OXActionTypeVerifyBySmsStart){
                
        }
               if([result[@"action_type"] integerValue]== OXActionTypeVerifyBySmsCheck){
                
        }
            ………………
           ………………
        }     
                        

5. 人脸识别

方法用途:

通过上传两张照片,对比两张照片中的人脸特征信息,判断是否为同一个人并返回对应对比结果

使用方法:

初始化成功后调用requestAction方法,初次使用需要先调用采集方法,然后在进行人脸识别

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;

参数说明:

字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeVerifyByFaceCollection、OXActionTypeVerifyByFaceCollection)
请求参数 params NSDictionary @{@"image":@"图片资源",@"image_type":@"传输类型"}
if(image_type==base64)image=base64 字符串
if(image_type==image)image=UIImage 对象

示例代码

        NSData *faceData = UIImageJPEGRepresentation(self.faceCollection.image, 0.6);
        //base64
        NSMutableDictionary *params = [[NSMutableDictionary  alloc] init];
        params[@"image"] = [faceData base64EncodedStringWithOptions:0];
        params[@"image_type"] = @"base64";
        //image
        NSMutableDictionary *params = [[NSMutableDictionary  alloc] init];
        params[@"image"] = self.faceImage.image;
        params[@"image_type"] = @"image";
        [OXClientEntry verifyFace:OXActionTypeVerifyByFaceCollection params: params];//人脸采集
        [OXClientEntry verifyFace:OXActionTypeVerifyByFaceRecognition params: params];//人脸识别           
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
返回详情 msg NString 返回详情

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        - (void)onActionResult:(NSDictionary *)result{
            if([result [@"action_type"] integerValue]== OXActionTypeVerifyByFaceCollection){
                
        }
            ………………
           ………………
        }
                        

6. 绑定手机号

方法用途:

绑定手机号后可以进行SAI验证

使用方法:

初始化成功后调用requestAction方法

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;

参数说明:

字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeBindTel)
请求参数 params NSDictionary {"tel":"手机号码"}

示例代码

        [OXClientEntry requestAction: OXActionTypeBindTel params:nil];     
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
返回详情 msg NString 返回详情

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        -(void)onActionResult:(NSDictionary *)result{

        }
                        

7. 人脸采集状态

方法用途:

查看人脸是否已采集

使用方法:

初始化成功后调用requestAction方法

方法接口:

+(void)requestAction:(OXActionType)type params:(NSDictionary *)params;

参数说明:

字段 参数 必填 类型 说明
验证类型 type OXActionType 验证类型枚举
(OXActionTypeCheckIsFaceImgCollected)
请求参数 params NSDictionary 可以为空

示例代码

        [OXClientEntry checkIsFaceImgCollected];    
                        

回调参数:

成功

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码
人脸采集状态 is_collect NString 人脸采集状态
返回详情 msg NString 返回详情

失败

字段 参数 类型 说明
action_type 请求类型 action_type NString 返回码接口请求类型
request_params 请求参数 request_params NSDictionary 请求参数
result 返回码 code NString 返回码

回调方法

        -(void)onActionResult:(NSDictionary *)result{

        }

                        

8. 获取最后验证手机号

方法用途:

可以获取到用户最后验证时填写的手机号码

使用方法:

初始化成功后调用getLastVerifiedTel方法

方法接口:

+ (NSString *)getLastVerifiedTel;

参数说明:

示例代码

        [OXClientEntry getLastVerifiedTel]; 
                        

注:更多细节详见DEMO演示

iOS SDK 运行流程图

1. 一点算法验证——验证流程图

算法校验  判断设备信息是否与手机号关联,如果已关联算法校验直接通过,如果没有则不通过。


2. 短信校验码——验证流程图


3. 二次验证——验证流程图


4. SDK应用场景

4.1. 新用户注册

新用户注册的时候,需要进行运营商验证(运营商验证方式包含:一键验证、短信校验码等) ,校验成功后,秒验校验平台将自动帮您关联设备与手机号,下次调用一点算法验证进行登录,则不需要进行验证码校验,节省短信成本,节省流程,提升app用户的使用体验。

4.2. 登录场景

先进行一点算法校验,校验成功则允许用户登录,若校验失败,则需要进行运营商验证(运营商验证方式包含:一键验证、短信校验码等),运营商验证成功则允许用户登录。

4.3. 老用户相关操作

对于您信任的老用户,如果想要在登录的时候,通过一点算法校验,而不进行运营商验证,则需要调用绑定手机号的接口,关联设备与手机号。

iOS demo 介绍

1. iOS demo功能总览

1.1. 应用启动需要进行SDK的初始化,后续操作基于SDK的初始化成功



2. iOS demo 修改密码场景模拟

传统修改密码场景的实现是通过短信验证来实现的,操作比较复杂,而且需要短信费用。我们一点算法认证的修改密码场景只要用户绑定过手机号之后,修改密码时不用通过短信验证,改为通过秒验平台验证。使用秒验 SDK可简化修改密码的流程,节省开发者的费用,提升用户体验

2.1. 通过SAI校验修改



2.2. 一键登录



2.3. 通过短信验证修改



2.4. 通过人脸识别修改


注:本场景为虚拟场景请结合实际使用

错误码

返回码 返回描述
00000 成功
00001 参数错误
00002 无数据
00005 短信验证码超时
00009 请求失败
00031 验证失败
00100 无对应记录
00128 上传文件过大
10032 短信已发送
10069 短信发送太频繁
10110 网络请求异常
10112 JSON格式错误
11001 appID错误
11026 包名错误
11112 appID与包名不匹配
11117 app服务未开通
11118 app应用未审核通过
14021 手机号错误
14023 开发者验证失败
14024 开发者未授权
14033 使用次数不足
14043 手机号被绑定
14103 开发者身份验证失败
14109 账户余额不足
15001 用户登录Token超时
15002 appToken无效错误
15101 手机号未绑定
20115 签名错误
20124 temp_code错误
21056 发送短信失败
21108 模板错误
21120 语音验证码错误
21125 人脸验证失败
21127 未找到人脸
45002 未检测到蜂窝网络
45003 未检测到网络
45004 未安装SIM卡
45007 请求超时
45008 获取手机号失败
45009 登录取消
45010 登录超时
45027 参数异常
45028 请使用其他方式登录
45029 免密登录受限
45030 人脸图片体积过大
45031 人脸图片尺寸过大

token 二次校验

1. 接口描述

SDK身份验证成功后,客户端会获取到一个verify_token,sai平台可以对验证成功后的令牌二次校验,以提升安全性。通过服务端到服务端的校验,用户可以在二次校验通过后,允许用户操作(如修改密码)。


(注:app_sign生成规则,api_master_secret + current_time组成的字符串进行 md5加密)。

2. 请求说明

请求示例

HTTP:POST

请求URL:http://my.wlwx.com/req/api/server/Server/recheckVerifyToken

参数名称 参数类型 描述
app_id string 应用ID
app_sign string 应用签名
current_time string 当前时间
verify_token string 验证结果token
request_id string 用户端的请求序列号

示例:

        {
            "app_id" :"WOKCIUUMFWOSRKOICUDODSW",
            "app_sign" :"7530A4C8AD469A93B4EB2202F670B979",
            "current_time" :"1530155497246",
            "verify_token" :"WE32F9SD8DKX8FEWJC8K42LJL46",
            "request_id" :"XX123456"
        }

3. 返回说明

参数名称 参数类型 描述
code string 错误码
msg string 错误信息
request_id string 每个http请求的唯一标识

示例:

        {
            "code" :"0",
            "msg" :"" ,
            "request_id" :"XX123456"
        } 

4. 服务器时间校对接口

请求示例

HTTP:POST

请求URL:http://my.wlwx.com/req/api/server/Server/serverTimeStamp13Check

(注:请求参数有time_stamp13参数,则多返回一个时间差参数)

参数名称 参数类型 必须 描述
time_stamp13 string false 验证结果token

示例:

{"time_stamp13": "1530155497246"} 

返回参数:参数类型JSON

参数名称 参数类型 描述
code string 错误码
msg string 错误信息
system_time_stamp13 string 系统时间
time_diff string 与系统的时间比对

示例:

        {
            "code": "00000",
            "msg": "OK",
            "system_time_stamp13": 1530157458206,
            "time_diff": 1960960
        }

短信验证码

1. 接口描述

发送短信接口

接口Url: http://my.wlwx.com/req/api/server/Sms/smsSend

支持格式: JSON

HTTP:POST

2. 请求参数

样例:

    {
        "sign": "xxxxx",
        "app_id": "xxxxx",
        "sms_template": "模板名称",
        "sms_param": {"code": "457156"},
        "tel": "138XXXXXXXX",
        "time_stamp13": "1520489490817"
    }
                    

sign = MD5(APP服务秘钥 + time_stamp13)

参数 必须 类型范围 说明
sign true String 请求签名(32位)
time_stamp13 true String 13位时间戳
app_id true String 应用id
tel true String 手机号码
sms_template true String 模板名称
sms_param true JSON 模板参数

3. 返回参数

格式:JSON

样例:

    {
    "code":"00000",
    "msg":" OK" ,
    "order_id":"1234567890"
    }
                    

参数意义:

参数 类型范围 说明
code String "00000": 代表成功
msg String "OK": 代表成功
order_id String 订单号
*注意:如果接收到的错误码不是00000,都视为有错误。
*注意:如果HTTPS请求超时,不代表未接收订单,可以根据单号查询订单是否接收成功
请做好异常处理。

4. demo 下载

服务端API demo包含java、php演示代码,相关接入操作可参考demo中的代码演示。


java/php Demo下载 OxApiDemo.zip

错误码列表

    00000          成功
    00001          参数错误
    00002          无数据
    00005          短信验证码超时
    00009          请求失败
    00031          验证失败
    00100          无对应记录
    00128          上传文件过大
    10032          短信已发送
    10069          短信发送太频繁
    10110          网络请求异常
    10112          JSON格式错误
    11001          appID错误
    11026          包名错误
    11112          appID与包名不匹配
    11117          app服务未开通
    11118          app应用未审核通过
    14021          手机号错误
    14023          开发者验证失败
    14024          开发者未授权
    14033          使用次数不足
    14043          手机号被绑定
    14103          开发者身份验证失败
    14109          账户余额不足
    15001          用户登录Token超时
    15002          appToken无效错误
    15101          手机号未绑定
    20115          签名错误
    20124          temp_code错误
    21056          发送短信失败
    21108          模板错误
    21120          语音验证码错误
    21125          人脸验证失败
    21127          未找到人脸
    45001          数据网络切换异常
    45002          未检测到蜂窝网络
    45003          未检测到网络
    45004          未安装SIM卡
    45005          没有权限 ACCESS_NETWORK_STATE
    45006          没有权限 READ_PHONE_STATE
    45007          请求超时
    45008          获取手机号失败
    45009          登录取消
    45010          登录超时
    45011          登录页UI加载异常
    45013          包签名错误
    45017          联通取号失败
    45018          移动取号失败
    45019          电信取号失败
    45021          取号请求时获取imsi失败
    45022          数据解析异常
    45023          未知错误一般出现在线程捕获异常
    45025          授权请求时获取imsi失败
    45026          用户权限不足
    45027          参数异常
    45028          请使用其他方式登录
    45029          免密登录受限
    45030          人脸图片体积过大
    45031          人脸图片尺寸过大