#import <SecurityGuardSDK/Open/OpenSecurityGuardManager.h>
#import <SecurityGuardSDK/Open/OpenSecurityBody/IOpenSecurityBodyComponent.h>
#import <SecurityGuardSDK/Open/OpenSecurityBody/OpenSecurityBodyDefine.h>
#import <SecurityGuardSDK/Open/OpenSecurityBody/IOpenSecurityBodyComponent.h>
@protocol IOpenSecurityBodyComponent <NSObject>
/**
* 获取风控参数
* @return 用户昵称,获取失败返回nil
*/
- (NSString*) getSecurityBodyDataEx: (NSString*) timeStamp
appKey: (NSString*) appKey
authCode: (NSString*) authCode
extendParam: (NSDictionary*) extendParam
flag: (int) flag
env: (int) env
error: (NSError* __autoreleasing*) error;
@end
在需要使用数据风控的场景,如注册、登陆、活动页面,可以在用户点击“注册”、“登陆”等业务按钮时、业务逻辑处理前获得该token,服务端通过该token查询风险结果
入参
timeStamp nil
appKey nil
authCode 0335
extendParam nil
flag OPEN_SECURITYBODY_FLAG_FORMAT_GENERAL
env OPEN_SECURITYBODY_ENV_ONLINE
error NSError对象指针
返回
调用成功不为空的wtoken,需要将此token传递到自己的server端,再由自己的server端将此 token透传到聚安全server端,获得最后的风控校验结果
wtoken在后段风险识别使用 参考 数据风控-服务器接入指南-风险识别
注意
发生获取不到wtoken,多半因为0335图片设置有问题。一个图片对应一个bundleid。如果变更bundleid,需要到聚安全网站生成新的图片;如果一个app存在不同版本在使用不同bundleid,需要重新获得图片;在使用msauthdemo时,请将demo的bundleid改成上传ipa时的bundleid。
错误诊断
接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头:
| 错误码 | 值 | 含义 |
|---|---|---|
| NOT FOUND YW_XXX.JPG | 203 | 可能AUTHCODE传递错误,或者没有加入图片到项目 |
| YW_XXX.JPG TOPKEY EROOR | 1215 | 可能AUTHCODE传递错误,或者没有加入图片到项目 |
| SEC_ERROR_SECURITYBODY_INVALID_THREAD | 1401 | 参数不正确,请检查输入的参数 |
| SEC_ERROR_SECURITYBODY_INVALID_THREAD | 1402 | 接口调用线程错误。请在非UI线程内调用此接口(因为本接口有耗时操作)。 |
| SEC_ERROR_SECURITYBODY_NET_ERROR | 1403 | 网络超时或网络断开 |
| SEC_ERROR_SECURITYBODY_SERVER_ERROR | 1404 | 聚安全服务端器错误,请确认应用是否有权限访问此接口 |
| SEC_ERROR_SECURITYBODY_APPKEY_ERROR | 1405 | 加密文件yw_1222_xxx.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey |
| SEC_ERROR_SECURITYBODY_SIGNATURE_ERROR | 1406 | 加密文件yw_1222_xxx.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey |
| SEC_ERROR_SECURITYBODY_ENCRYPTION_ERROR | 1407 | 数据加密错误, |
| SEC_ERROR_SECURITYBODY_TOP_ERROR | 1408 | TOP协议错误,请检查手机时间设置是否正常,加密图片yw_1222_0335.jpg使用是否正确 |
| SEC_ERROR_SECURITYBODY_CONCURRENT | 1409 | 接口被并发调用错误;本接口不支持多线程同时调用 |
| SEC_ERROR_SECURITYBODY_UNSUPPORTED | 1498 | 接口在这个版本的SDK中不支持 |
| SEC_ERROR_SECURITYBODY_UNKNOWN_ERR | 1499 | 未知错误,请重试 |
MSAuthDefines.h
/**
* 当前支持的验证类型
*/
typedef enum : NSUInteger {
MSAuthTypeSlide,
MSAuthTypeSms,
MSAuthTypeCall,
} MSAuthType;
import MSAuthVCFactory.h
/**
* 获取验证VC的工厂方法
*
* @param type 验证类型。目前支持的类型有滑动验证、短信验证和电话验证
* @param jsonData 聚安全服务器透传下发数据
* @param delegate 处理回调结果的代理
* @param language 需要展示的语言,如:zh_CN 简体中文, en 英文,language要和相应的Localizable.strings对应。nil为当前环境语言。如果语言文件不存在显示英文
* @param authCode 0335
* @param appKey 根据接入环境需要填入默认填写空
* @return 返回一个实例VC
*/
+ (UIViewController *)vcWithAuthType:(MSAuthType)type
jsonData:(NSString *)jsonData
language:(NSString*)lang
Delegate:(id<MSAuthProtocol>)delegate
authCode:(NSString*)code
appKey :(NSString*)key;
type和jsondata具体参考 数据风控-服务器接入指南-风险识别
| 参数 | 赋值 |
|---|---|
| type | 图中captcha_type |
| jsonData | 图中captcha_client_need_info |
| appKey | 根据接入环境需要填入默认填写空 |
| authCode | 填写0335 |
使用pushViewController 呼出界面
UIViewController *vc = [MSAuthVCFactory vcWithAuthType:服务器回传的验证类型
jsonData:服务器回传的验入参
language:@"en"
Delegate:self
authCode:@"0335"
appKey:nil];
[self.navigationController pushViewController:vc animated:YES]; 使用presentViewController,带navigationbar
UINavigationController *navigationController =
[[UINavigationController alloc] initWithRootViewController:vc];
//now present this navigation controller modally
[self presentViewController:navigationController
animated:YES
completion:^{
}]; /**
* 验证VC的工厂方法, 使用风险验证用户直接调用这个接口
* @param type 验证类型。目前支持的类型有滑动验证
* @param language 需要展示的语言,如:zh_CN 简体中文, en 英文,language要和相应的Localizable.strings对应。nil为当前环境语言。如果语言文件不存在显示英文
* @param delegate 处理回调结果的代理
* @param authCode 填写0335
* @param appKey 根据接入环境需要填入默认填写空
* @return 返回一个实例VC
*/
+ (UIViewController *)simapleVerifyWithType:(MSAuthType)type
language:(NSString*)lang
Delegate:(id<MSAuthProtocol>)delegate
authCode:(NSString*)code
appKey :(NSString*)key;
与前一个接口的区别,不需要传入jsondata。调用可以直接做为人机识别调用使用
type具体参考 数据风控-服务器接入指南-风险识别
| 参数 | 赋值 |
|---|---|
| type | 图中captcha_type |
| appKey | 根据接入环境需要填入默认填写空 |
| authCode | 填写0335 |
simapleVerifyWithType是纯验证接口,功能为纯粹的验证,用户可以使用聚安全的风控识别能力也可以使用原有系统能力。目前支持的验证类型为滑动.从能力上讲,simapleVerifyWithType是做为人机识别验证模式
vcWithAuthType会将前面JAQ风险识别带入到验证中,识别的结果以jsonData和type形式做为。用户服务器可以将带验证人的电话号码传入,所以在滑动以外还可以支持语音``短信。从能力上看vcWithAuthType是做为人机识别验证模式,还可以实现对于人身份核实(比如,改密,注册场景)
在回调函数中用户自己关闭controller,sdk内部不负责控件的关闭
typedef enum {
VERIFY_REUSLT_OK = 0,
VERIFY_REUSLT_FAIL = 1
}t_verify_reuslt
@protocol MSAuthProtocol <NSObject>
/**
* 验证结果的回调
*
* @param error 验证错误返回码, nil表示正确 非空为验证失败
* @param sessionId 聚安全服务器下发二次验证sessionid,
* 三方服务器利用token获得验证结果
*/
- (void)verifyDidFinishedWithResult:(t_verify_reuslt)code
Error:(NSError *)error
SessionId:(NSString *)sessionId;
@end
参数error对象 ErrorDomain详细定义
参数error对象 中出现sendStatus详细定义
| 枚举值 | 含义 |
|---|---|
| -10 | 短信验证码发送失败 |
| -20 | 语音验证码发送失败 |
| -30 | 邮件验证码发送失败 |
| -50 | 摇一摇发起失败 |
| -60 | 滚小球发起失败 |
参数error对象 中出现verifyStatus详细定义
| 枚举值 | 含义 |
|---|---|
| -11 | 短信验证码验证失败 |
| -21 | 语音验证码验证失败 |
| -31 | 邮件验证码验证失败 |
| -51 | 摇一摇检查失败 |
| -61 | 滚小球检查失败 |
进行登录,改密,找密,注册等涉及敏感场景时,需要调用风险采集获得token。调用者需要把token传到用户的服务端,服务端用token请求聚安全服务端获得相应的风险判断。聚安全会把风险判断以json形式返回。
#import <SecurityGuardSDK/Open/OpenSecurityGuardManager.h> #import <SecurityGuardSDK/Open/OpenSecurityBody/IOpenSecurityBodyComponent.h> #import <SecurityGuardSDK/Open/OpenSecurityBody/OpenSecurityBodyDefine.h> #import <SecurityGuardSDK/Open/OpenSecurityBody/IOpenSecurityBodyComponent.h>
获得风险采集信息
id<IOpenSecurityBodyComponent> sbComp = [[OpenSecurityGuardManager getInstance] getSecurityBodyComp];
NSError* error = nil;
NSString* wtoken = [sbComp getSecurityBodyDataEx: nil
appKey: nil
authCode: @"0335"
extendParam: nil
flag: OPEN_SECURITYBODY_FLAG_FORMAT_GENERAL //指定格式
env: OPEN_SECURITYBODY_ENV_ONLINE //指定环境
error: &error];
如果token返回为nil表示风险采集失败,如果风险采集失败建议认为验证失败,用户阻止其后操作
返回的wtoken,需要到服务器端进行风险判断.具体调用参看 风险识别
#import <MSAuthSDK/MSAuthSDK.h>
UIViewController *vc = [MSAuthVCFactory vcWithAuthType:服务器回传的验证类型
jsonData:服务器回传的验入参
language:@"en"
Delegate:self
authCode:@"0335"
appKey:nil];
[self.navigationController pushViewController:vc animated:YES];
@interface ViewController () <MSAuthProtocol>
...
#pragma mark - MSAuthProtocol methods
- (void)verifyDidFinishedWithError:(NSError *)error SessionId:(NSString *)sessionId {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
NSLog(@"验证失败 %@", error);
} else {
NSLog(@"验证通过 %@", sessionId);
}
//将sessionid传到经过app服务器做二次验证
});
}
#import <MSAuthSDK/MSAuthSDK.h>
UIViewController *vc = [MSAuthVCFactory simapleVerifyWithType:服务器回传的验证类型
language:@"en"
Delegate:self
authCode:@"0335"
appKey:nil];
@interface ViewController () <MSAuthProtocol>
...
#pragma mark - MSAuthProtocol methods
- (void)verifyDidFinishedWithError:(NSError *)error SessionId:(NSString *)sessionId {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
NSLog(@"验证失败 %@", error);
} else {
NSLog(@"验证通过 %@", sessionId);
}
[self.navigationController popViewControllerAnimated:YES];
//将sessionid传到经过app服务器做二次验证
});
}
UI定制
你通过修改MSAuthSDK.framework中两个bundles: MSADefaultImages.bundle和MSADefaultLocale.bundle中的字符串和图片来定制UI.
多语言
MSADefaultLocale.bundle 增加相应语言