# PayEgisDeviceService **Repository Path**: mobiledevman/PayEgisDeviceService ## Basic Information - **Project Name**: PayEgisDeviceService - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-20 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PayEgisDeviceService PayEgis设备指纹官方SDK v5.6.5.1 ## 概要介绍 通付盾提供的设备指纹是一种基于网籍库的设备凭证识别技术,通过快速获取上网设备的软件、硬件、网络等多层次指纹信息,经过一定的复杂规则算法,为每一台入网设备生成跨平台的唯一标识设备ID,该设备指纹识别服务简称为DeviceId服务。通付盾设备指纹 SDK 支持多种终端类型,包括:Web、Android、iOS等多种类型。 设备指纹服务接口包括:设备指纹采集接口和设备指纹查询接口。设备指纹的采集可通过WEB端JS集成、iOS SDK集成、Android SDK集成三种方式实现接口调用。具体集成方法可分别参考《通付盾设备指纹前端集成手册--Web》、《通付盾设备指纹前端集成手册--iOS》和《通付盾设备指纹前端集成手册--Android》。 ## 交互流程 1. 用户通过移动端App(已嵌入设备指纹采集接口)访问商户网站,通付盾设备指纹sdk采集用户设备信息; 注:步骤3中,sessionId为设备指纹生成所用的tokenID,后续客户可根据该tokenID查询当次对应设备指纹。tokenID由客户生成,使用sessionId或其他UUID均可。 2. 将采集到的移动设备参数传递给通付盾设备指纹云服务后台。 3. 通付盾设备指纹云服务后台通过算法生成设备唯一的设备号码(设备指纹)。 4. 商户网站向通付盾设备指纹云服务后台发起查询设备指纹的请求。 5. 通付盾设备指纹云服务后台返回设备指纹和设备信誉。 ## 集成方式 在 Podfile 文件中加入 ```Ruby pod 'PayEgisDeviceService' ``` 安装 ```Ruby pod install ``` 如果无法安装 SDK 最新版本,运行以下命令更新本地的 CocoaPods 仓库列表 ```Ruby pod repo update ``` 示例 ```Objective-C - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [PayegisDID initWithAppId:appid AppKey:appkey completionBlock:^(NSError *error) { if(!error){ //初始化成功 } }]; return YES; } ``` 参数名 | 含义 ---|--- ---|--- appId | 通付盾分配给商户的唯一应用ID号 appKey | 通付盾分配给商户的Key值 ```Objective-C - (void)viewDidLoad { [PayegisDID serviceWithSessionId:self.sessionStr Scence:PayEgisScencePay completionBlock:^(NSError *error) { if(!error){ //后续业务逻辑 } }]; } ``` 参数说明 参数名 | 含义 ---|--- sessionId | 关联Id,用户自行构造,尽可能唯一 scence | 描述埋点场景,枚举值 >SDK 通过回调(callback)方式通知上层 API 调用结果 >所有调用错误都会以 NSError 的形式暴露。针对不同场景,我们将错误进行分类。 状态码 | 含义(从NSError中userinfo获取的错误信息) ---|--- 104 | 服务端返回参数格式非法 103 | TAG输入非法 101 | SDK正在初始化 -1 | 签名校验不通过 -303 | app_type不对 -305 | 参数无法被解码 -306 | sessionId为空 其他负数 | NSURLErrorDomain中对应的网络错误 ## Webview设备指纹集成 如需在APP内以Webview形式集成设备指纹,需在webview loadRequest方法之前调用设备指纹SDK如下方法。示例代码如下: ``` Objective-C NSDictionary *context=@{PayegisSecurityContextAppId:appid,PayegisSecurityContextAppKey:appkey}; [PayegisDID setWebView:context view:webView]; ``` 1. webview所引入的页面需添加设备指纹JS(详情可参见 《通付盾设备指纹前端集成手册-Web》) 1. 该种集成方式使用webview内页面JS的sessionId查得设备指纹与iOS SDK方式所得一致。 1. 为提高安全性及数据时效性,建议每次webview loadRequest前均进行调用。 ## 网络监控/断线重发功能 设备指纹SDK默认具有防网络断线两次重发机制,首次-间隔10s-间隔20s,单次成功后停止重发。网络监控持续重发 本功能开启后会持续监控网络情况,监测网络正常时即会重启第1点操作(因需持续监控,考虑耗电量及内存占用,至多重复5次第一点操作仍失败后,停止监控)。调用方法(请在初始化设备指纹之前执行)。 ```Objective-C [PayegisDID setIsBgTry:YES]; // 不调用该方法,或设置为NO为不启用监控功能 ``` ## 常见问题 ld: framework not found FileProvider for architecture arm64 出现这个问题是因为静态库是用Xcode9打包的。如果用xcode8编译的话就会出现这个问题,建议升级xcode最新版本,如果不升级方法如下: 从Xcode9里把这个库拷贝出来。然后放到Xcode8上面 /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/ 如果加进去了可能还会遇到 framework not found IOSurface for architecture armv7 那么同样的方法把相关的库从Xcode9的frameworks 目录下找到相关库添加到Xcode8目录下面 # # 事件上报 **1.开启事件上报** * 事件上报类的初始化,在设备指纹初始化之后调用 ``` /** 开启事件上报 */ + (void)trackStart; ``` * 示例 ```Objective-C - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [PayegisEventCenter trackStart]; return YES; } ``` **2.配置缓存策略** * 在开启事件上报之后调用 ```Objective-C /** 配置缓存策略 @param strategy 策略枚举值 */ + (void)setUplodStrategy:(PGSUplodStrategy)strategy; ``` 参数 | 含义 ------------- | ------------- PGSUplodStrategyRealTime | 实时上报 PGSUplodStrategyBatch | 批量上报,达到缓存临界值时触发发送 * 示例 ```Objective-C - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [PayegisEventCenter trackStart]; [PayegisEventCenter setUplodStrategy:PGSUplodStrategyBatch]; [PayegisEventCenter sharedInstance].batchEventCount = 3; return YES; } ``` **3.账号相关** * 开启事件上报之后可以配置上报账号相关信息 ```Objective-C /** 上报账号对应实时数据中的新增账号数字段 @param account 账号名 @param type 账号类型 */ + (void)setAccount:(NSString *)account type:(PGSAccountType)type; ``` 参数 | 含义 ------------- | ------------- PgsOwnAcc | 自有账号 PgsOthAcc | 其他账号(第三方登录生成) * 示例 ```Objective-C - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... [PayegisEventCenter trackStart]; [PayegisEventCenter setAccount:@"246531" type:PgsOwnAcc]; return YES; } ``` **4.统计页面时长** * 统计页面的使用时间 ```Objective-C /** 标记一次页面访问的开始 此接口需要跟trackVCEnd配对使用 多次开始以第一次开始的时间为准 @param name 页面名 */ + (void)trackVCBegin:(NSString *)name; /** 标记一次页面访问的结束 此接口需要跟trackVCBegin配对使用 多次结束以第一次结束的时间为准 @param name 页面名字 */ + (void)trackVCEnd:(NSString *)name; ``` * 示例 ```Objective-C -(void)viewWillAppear:(BOOL)animated{ [PayegisEventCenter trackVCBegin:pageName]; } -(void)viewDidDisappear:(BOOL)animated{ [PayegisEventCenter trackVCEnd:pageName]; } ``` **5.APP使用时长** * 统计app在前台的时间 ```Objective-C /** 开始统计使用时长 建议在App进入前台时调用 */ + (void)trackAppBegin; /** 结束统计使用时长 建议在App离开前台时调用 */ + (void)trackAppEnd; ``` * 示例 ```Objective-C - (void)applicationWillResignActive:(UIApplication *)application { [PayegisEventCenter trackAppEnd]; } - (void)applicationDidBecomeActive:(UIApplication *)application { [PayegisEventCenter trackAppBegin]; } ``` ## 内容过滤 * 过滤敏感,色情内容 ```Objective-C /** 文本过滤 @param text 审核的文本 @param filterEnd 是否成功的回调 */ + (void)textFilter:(NSString *)text filter:(filterEnd)filterEnd; ``` * 示例 ```Objective-C [PayegisEventCenter textFilter:self.textView.text filter:^(BOOL isPass) { if (isPass) { //过滤通过 } else{ } }]; ```