阿里云首页 风险识别

设备风险SDK iOS接入

本文介绍了阿里云设备指纹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依赖包:

      AppTrackingTransparency.framework
      CoreTelephony.framework
      libresolv.tbd
      Security.framework
      AdSupport.framework
      libz.tbd
      libc++.tbd
      deviceiOS.framework
    添加依赖包

合规条款

1、您需要确保App有《隐私政策》,并且在用户首次启动App时就弹出《隐私政策》取得用户同意,请勿默认客户已勾选。

2、您务必在《隐私政策》中向用户告知使用阿里云设备风险识别SDK,参考条款如下:

  • 使用SDK名称:阿里云设备风险识别SDK;

  • 服务类型:检测篡改设备、模拟器、恶意脚本等异常设备 ;

  • 收集设备信息:

    • 设备基础信息:设备制造商、设备品牌、设备型号、设备名称、设备操作系统信息、设备配置信息、设备环境信息;

    • 设备标识信息:IMEI(国际移动设别码)、IMSI(国际移动用户识别码)、MAC地址、ICCID(集成电路卡识别码)、AndoridId、硬件序列号、OAID、Google AID(Google广告ID)、蓝牙MAC、IDFA、IDFV;

    • 设备网络信息:IP地址、WIFI信息、BSSID、SSID、网络运营商信息、网络类型、网络状态;

    • 其他信息:应用列表、SDK宿主APP信息(包括:应用名称、应用版本、安装时间);

  • 隐私政策链接:https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud202111120818_92724.html

3、您务必确保用户同意《隐私政策》之后,再初始化阿里云设备风险识别SDK。

接口定义说明

接入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. 初始化调用。

    根据苹果官方隐私政策规定,IDFA的使用除了在plist中做相关说明之后,需要调用方主动弹框提示用户授权,因此开发环境需要确保是xcode12以上。

    调用代码示例:

    /**
     * 如果是iOS 14上,尝试提供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 * securityDevice = [[SecurityDevice alloc] init];
        [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];
        //注意!!!!,以这种方式启动设备指纹,iOS 14和非iOS 14分开判断。
        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秒内完成。

  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集成后,建议您进行以下操作:

  • App Store上架时,请确保App已申请了IDFA权限,并在Info.plist中已添加NSUserTrackingUsageDescription说明,否则会导致上架失败。详细内容,请参见iOS相关说明文档

  • 请在Info.plist中添加Privacy- Local Network Usage Description说明,表示检测本地网络的连通性,可以根据您的产品属性进行内容微调。

  • 请确保在初始化成功(initDevice收到回调时返回code==10000)后,再调用getSession接口获取Session

  • 建议在调用getSession接口之前检查initDevice是否成功。这样可以防止调用initDevice接口出现网络连接失败的情况下,重新发起初始化调用,确保至少一次初始化成功。

调用风险识别API接口

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

注册风险识别功能及参数说明

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

登录风险识别功能及参数说明

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

接入和使用时序图如下:

说明

其中第1和2步骤仅首次加载需要调用,第3~9步骤可以根据业务情况循环发起。

调用风险接口