本文档介绍了阿里云设备指纹iOS SDK接入流程。

前提条件

  • iOS系统版本要求:

    iOS系统版本为9.0及以上。

  • 已完成以下依赖配置:
    1. 下载iOS SDK(SDK为XCode上标准静态framework包),并在下载SDK的控制台中生成APPKey。
    2. 在XCode中引用已下载的iOS SDK包。
    3. 选择工程配置,修改Build Phases > Link Binary With Libraries,添加deviceiOS.framework依赖包:
      libz.tbd
      libc++.tbd
      deviceiOS.framework
    添加依赖包

接口定义说明

接入SDK的时候,设备指纹接口返回内容说明如下:
/**
 * 设备指纹deviceToken
 */

@interface SecuritySession: NSObject

/**
 * 获取Session操作的结果
 */
@property(atomic) int code;

/**
 * 包含Session结果的字符串
 */
@property(copy, atomic) NSString * session;

@end
@interface SecurityDevice : NSObject

/**
 *  设备指纹初始化函数
 */
- (void)initDevice:(NSString *)userAppKey :(void (^)(int))initCallback;//设备指纹userAppKey, 从产品控制台申请获得

/**
 * 获取DeviceToken
 */
- (SecuritySession *) getSession;

@end

接入流程

  1. 初始化调用。
    针对开发环境为xcode11及以下版本,调用代码示例:
    //初始化设备指纹
    SecurityDevice * securityDevice = [
        [SecurityDevice alloc] init
    ];
    if (nil != securityDevice) {
        [securityDevice initDevice: @ "xxxxxx": ^ (int code) {
            NSString * initResult = [NSString stringWithFormat: @ "设备指纹初始化,结果 %d", code];
            NSLog(@ "%@", initResult);
    
            if (10000 != code) {
                NSLog(@ "初始化失败,后续getSession接口调用结果不可用于风险标签查询");
            } else {
                NSLog(@ "初始化成功,后续可以正常调用getSession接口");
            }
        }];
    }
    针对开发环境为xcode12及以上版本,调用代码示例:
    /**
     * 如果是iOS14上,尝试提供IDFA的弹框
     */
    typedef void (^IDFARequestBlock)(bool success);
    
    API_AVAILABLE(ios(14))
    static bool isATTrackingEnabled(ATTrackingManagerAuthorizationStatus status){
        if(ATTrackingManagerAuthorizationStatusAuthorized == status){
            return true;
        }
        
        return false;
    }
    
    - (void)helperRequestIDFAPermissionWithBlock:(IDFARequestBlock) complete{
        if(@available(iOS 14, *)){
            ATTrackingManagerAuthorizationStatus authStatus = ATTrackingManager.trackingAuthorizationStatus;
            //未弹框
            if(ATTrackingManagerAuthorizationStatusNotDetermined == authStatus){
                [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
                    if(nil != complete){
                        return complete(isATTrackingEnabled(status));
                    }
                }];
            }else if(nil != complete){
                return complete(isATTrackingEnabled(authStatus));
            }
        }
    }
    
    - (void)initSecurityDevice{
        [securityDevice initDevice: @ "xxxxxx": ^ (int code) {
            NSString * initResult = [NSString stringWithFormat: @ "设备指纹初始化,结果 %d", code];
            NSLog(@ "%@", initResult);
    
            if (10000 != code) {
                NSLog(@ "初始化失败,后续getSession接口调用结果不可用于风险标签查询");
            } else {
                NSLog(@ "初始化成功,后续可以正常调用getSession接口");
            }
        }];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        //注意!!!!, 以这种方式启动启动设备指纹, iOS14和非iOS14分开判断
        if(@available(iOS 14, *)){
            [self helperRequestIDFAPermissionWithBlock:^(bool success){
                if(success){
                    NSLog(@"IDFA--->有权限了");
                }else{
                    NSLog(@"IDFA--->没权限了");
                }
                
                [self initSecurityDevice];
            }];
        }else{
            [self initSecurityDevice];
        }
    }
  2. 获取deviceToken。
    从设备指纹SDK获取deviceToken,通过getSession()方法可以从阿里云服务端查询当前设备的风险识别结果。以下是调用代码示例:
    //获取设备指纹Session, 请注意此接口应该在收到初始化接口回调成功之后调用,一般init接口会在3秒内完成
    SecuritySession * securitySession = [securityDevice getSession];
    
    NSString * rs = [NSString stringWithFormat: @ "[%d]%@", securitySession.code, securitySession.session];
    NSLog(@ "Session=>%@", rs);
    if (10000 != code) {
        NSLog(@ "获取session失败,调用结果不可用于风险标签查询");
    } else {
        NSLog(@ "获取session成功,后续可以正常查询风险标签");
    }

后续操作

完成设备指纹SDK集成后,建议您进行以下操作:
  • AppStore上架时,请确保App已申请了IDFA权限,并在Info.plist中已添加NSUserTrackingUsageDescription说明,否则会导致上架失败。详细内容请参考iOS相关说明文档
  • 请确保在初始化成功(initDevice 收到回调时返回code==10000 )后,再调用getSession接口获取Session。
  • 为了防止调用initDevice的时候出现网络连接失败的情况,建议在getSession之前检查initDevice是否成功。这样是为了在initDevice不成功则重新发起初始化调用时,能确保至少一次初始化成功。

调用风险识别API接口

将deviceToken与其他参数,根据如下相应的风险识别服务事件参数文档说明,请求风险识别API接口进行识别:

注册风险识别-增强版事件及返回参数

营销风险识别-增强版事件及返回参数

登录风险识别-增强版事件及返回参数

设备风险识别事件及返回参数

接入和使用时序图如下:
说明 其中第1和2步骤仅首次加载需要调用,第3、4、5、6、7、8、9步骤可以根据业务情况循环发起。
调用风险识别API接口流程图