全部产品
阿里云办公

iOS SDK API

更新时间:2017-06-07 13:26:11

获取数据风控wtoken

  1. #import <SecurityGuardSDK/JAQ/SecurityVerification.h>
  2. +(NSString*)doJAQVerfificationSync:(NSDictionary*)info
  3. timeout:(NSInteger) timeout;

在需要使用数据风控的场景,如注册、登陆、活动页面,可以在用户点击“注册”、“登陆”等业务按钮时、业务逻辑处理前获得该token,服务端通过该token查询风险结果。函数不能再主线程执行,否则会抛出异常。

入参

  • Info: nil;

  • timeout: 接口超时时间,单位秒。只能传入1 <= timeout <= 22的整型,传入其他值,将使用默认超时时间(22秒);

返回

  • wtoken:调用方得到此wtoken后,需要将此token传递到自己的server端,再由自己的server端将此token透传到聚安全server端,获得最后的风控校验结果。
  • wtoken在后端风险识别使用 参考 API概览-业务风险防控API

错误诊断

接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头:

错误码 含义
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_0335.jpg格式或其内数据有问题。常见原因为用错图片(iOS与Android图片不通用)或者图片内没有存放对应的Top Appkey
SEC_ERROR_SECURITYBODY_SIGNATURE_ERROR 1406 加密文件yw_1222_0335.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

  1. /**
  2. * 当前支持的验证类型:目前支持的类型有滑动验证,即将会有更多验证方式加入
  3. */
  4. typedef enum : NSUInteger {
  5. MSAuthTypeSlide
  6. } MSAuthType;

启动验证(依赖业务风险防控结果启动)

import MSAuthVCFactory.h

  1. @interface MSAuthVCFactory : NSObject
  2. /**
  3. * 获取验证VC的工厂方法
  4. *
  5. * @param language 需要展示的语言,如:zh_CN 简体中文, en 英文。nil为当前环境。如果语言包不存在显示英文
  6. * @param type 验证类型。目前支持的类型有滑动验证,即将会有更多验证方式加入
  7. * @param jsonData 数据风控服务器透传下发数据
  8. * @param delegate 处理回调结果的代理
  9. * @param lang 设置语言
  10. * @return 返回一个实例VC
  11. */
  12. + (UIViewController *)vcWithAuthType:(MSAuthType)type
  13. jsonData:(NSString *)jsonData
  14. language:(NSString*)lang
  15. Delegate:(id<MSAuthProtocol>)delegate;

通过函数可以呼出验证UI

jsonData和type为服务端通过业务风险防控获得的结果。 具体参考 API概览-业务风险防控API

pushViewController

  1. UIViewController *vc = [MSAuthVCFactory simapleVerifyWithType:服务器回传的验证类型
  2. language:@"zh_CN"
  3. Delegate:self];
  4. [self.navigationController pushViewController:vc animated:YES];

使用presentViewController,带navigationbar

  1. UINavigationController *navigationController =
  2. [[UINavigationController alloc] initWithRootViewController:vc];
  3. //now present this navigation controller modally
  4. [self presentViewController:navigationController
  5. animated:YES
  6. completion:^{
  7. }];

启动验证(不依赖业务风险防控结果,直接启动验证)

  1. /**
  2. * 验证VC的工厂方法, 使用风险验证用户直接调用这个接口
  3. * @param type 验证类型。目前支持的类型有滑动验证,即将会有更多验证方式加入
  4. * @param language 需要展示的语言,如:zh_CN 简体中文, en 英文。nil为当前环境。如果语言包不存在显示英文
  5. * @param delegate 处理回调结果的代理
  6. * @return 返回一个实例VC
  7. */
  8. + (UIViewController *)simapleVerifyWithType:(MSAuthType)type
  9. language:(NSString*)lang
  10. Delegate:(id<MSAuthProtocol>)delegate;

启动验证两个接口:simapleVerifyWithType和vcWithAuthType区别

simapleVerifyWithType是直接启动验证码接口,功能为纯粹的验证。目前支持的验证类型为滑动。

vcWithAuthType会将之前步骤中调用的业务风险防控结果(jsonData和type)带入到验证中,在该结果中会建议使用的验证类型(即将支持语音、短信验证)。

验证结果回调

用户通过回调函数关闭controller,sdk内部不会关闭此控件。

  1. typedef enum {
  2. VERIFY_REUSLT_OK = 0,
  3. VERIFY_REUSLT_FAIL = 1
  4. }t_verify_reuslt
  1. @protocol MSAuthProtocol <NSObject>
  2. /**
  3. * 验证结果的回调
  4. *
  5. * @param error 验证错误返回码, nil表示正确 非空为验证失败
  6. * @param sessionId 聚安全服务器下发二次验证sessionid,
  7. * 三方服务器利用token获得验证结果
  8. */
  9. - (void)verifyDidFinishedWithResult:(t_verify_reuslt)code
  10. Error:(NSError *)error
  11. SessionId:(NSString *)sessionId;
  12. @end

参数error对象 ErrorDomain详细定义:

含义
AliAuthGeneric 一般性错误来自网络异常
AliAuthServer 网关通信错误
AliAuthServiceNc 滑动业务错误
AliAuthService 验证业务错误

业务风险防控与验证示例代码

Step 0: 风险采集和判断

进行登录,改密,找密,注册等涉及敏感场景时,需要调用风险采集获得wtoken。调用者需要把wtoken传到用户的服务端,服务端用wtoken请求业务风险防控API获得相应的风险结果。数据风控服务端会把风险结果以json形式返回。

  1. #import <SecurityGuardSDK/JAQ/SecurityVerification.h>
  1. 获得风险采集信息,
  2. NSString* wtoken = [SecurityVerification doJAQVerfificationSync:info
  3. timeout:timeout];

如果wtoken返回为nil表示风险采集失败,如果风险采集失败建议认为验证失败,用户阻止其后操作。
返回的wtoken,需要到服务器端进行风险判断.具体调用参看 API概览-业务风险防控API

Step 1: 引入头文件

  1. #import <MSAuthSDK/MSAuthSDK.h>

Step 2: 风险验证 viewcontroller

  1. UIViewController *vc = [MSAuthVCFactory vcWithAuthType:服务器回传的验证类型
  2. jsonData:@"来自风险识别后的返回值"
  3. language:@"zh_CN"
  4. Delegate:self];
  5. [self.navigationController pushViewController:vc animated:YES];

Step 3: 实现delegate回调

  1. @interface ViewController () <MSAuthProtocol>
  2. ...
  3. #pragma mark - MSAuthProtocol methods
  4. - (void)verifyDidFinishedWithError:(NSError *)error SessionId:(NSString *)sessionId {
  5. dispatch_async(dispatch_get_main_queue(), ^{
  6. if (error) {
  7. NSLog(@"验证失败 %@", error);
  8. } else {
  9. NSLog(@"验证通过 %@", sessionId);
  10. }
  11. //将sessionid传到经过app服务器做二次验证
  12. });
  13. }

Step 4: sessionid 验证
具体调用参看 API概览-验证码服务API

不依赖业务风险防控,直接使用验证码示例代码

Step 0: 引入头文件

  1. #import <MSAuthSDK/MSAuthSDK.h>

Step 1: 调用工厂类生成所需二次验证 viewcontroller

  1. UIViewController *vc = [MSAuthVCFactory simapleVerifyWithType:服务器回传的验证类型
  2. language:@"zh_CN"
  3. Delegate:self];
  4. [self.navigationController pushViewController:vc animated:YES];

Step 2: 实现delegate回调

  1. @interface ViewController () <MSAuthProtocol>
  2. ...
  3. #pragma mark - MSAuthProtocol methods
  4. - (void)verifyDidFinishedWithError:(NSError *)error SessionId:(NSString *)sessionId {
  5. dispatch_async(dispatch_get_main_queue(), ^{
  6. if (error) {
  7. NSLog(@"验证失败 %@", error);
  8. } else {
  9. NSLog(@"验证通过 %@", sessionId);
  10. }
  11. [self.navigationController popViewControllerAnimated:YES];
  12. //将sessionid传到经过app服务器做二次验证
  13. });
  14. }

Step 3:sessionid 验证
具体调用参看 API概览-验证码服务API

错误处理

1.如看到以下报错:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.
SG ERROR: 1210

你需要在info.plist中设置

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSAllowsArbitraryLoads</key><true/>
  4. </dict>