本文介绍了阿里云设备指纹iOS SDK接入流程。
前提条件
iOS系统版本要求:
iOS系统版本为9.0及以上。
已完成以下依赖配置:
下载iOS SDK(SDK为XCode上标准静态framework包),并在下载SDK的控制台中生成AppKey。
在XCode中引用已下载的iOS SDK包。
选择工程配置,修改
,添加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 SecurityToken : NSObject
/**
* 获取token操作的结果
*/
@property(atomic) int code;
/**
* 包含token结果的字符串
*/
@property(copy, atomic) NSString *token;
@end
@interface SecurityDevice : NSObject
/**
* 设备指纹初始化函数。
*/
- (void)initDevice:(NSString *)userAppKey :(void (^)(int))initCallback;//设备指纹userAppKey, 从
产品控制台申请获得。
/**
* 获取DeviceToken。
*/
- (SecurityToken *) getDeviceToken;
@end
接入流程
初始化调用。
根据苹果官方隐私政策规定,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(@ "初始化失败,后续getDeviceToken接口调用结果不可用于风险标签查询"); } else { NSLog(@ "初始化成功,后续可以正常调用getDeviceToken接口"); } }]; } - (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]; } }
获取deviceToken。
从设备指纹SDK获取deviceToken,通过getDeviceToken
()
方法可以从阿里云服务端查询当前设备的风险识别结果,以下是调用代码示例:说明获取设备指纹deviceToken, 请注意此接口应该在收到初始化接口回调成功之后调用,一般init接口会在3秒内完成。
SecurityToken * deviceToken = [securityDevice getDeviceToken]; NSString * rs = [NSString stringWithFormat: @ "[%d]%@", deviceToken.code, deviceToken.token]; NSLog(@ "deviceToken=>%@", rs); if (10000 != code) { NSLog(@ "获取deviceToken失败,调用结果不可用于风险标签查询"); } else { NSLog(@ "获取deviceToken成功,后续可以正常查询风险标签"); }
后续操作
完成设备指纹SDK集成后,建议您进行以下操作:
App Store上架时,请确保App已申请了IDFA权限,并在
Info.plist
中已添加NSUserTrackingUsageDescription
说明,否则会导致上架失败。详细内容,请参见iOS相关说明文档。请在
Info.plist
中添加Privacy- Local Network Usage Description
说明,表示检测本地网络的连通性,可以根据您的产品属性进行内容微调。请确保在初始化成功(initDevice收到回调时返回code==10000)后,再调用getDeviceToken接口获取
t
oken。建议在调用getDeviceToken接口之前检查
initDevice
是否成功。这样可以防止调用initDevice
接口出现网络连接失败的情况下,重新发起初始化调用,确保至少一次初始化成功。
调用风险识别API接口
将deviceToken与其他参数,根据如下相应的风险识别服务事件参数文档说明,请求风险识别API接口进行识别:
接入和使用时序图如下:
其中第1和2步骤仅首次加载需要调用,第3~9步骤可以根据业务情况循环发起。
