### 1.下载
下载 [ 人脸登录 SDK ](http://attachment.yun2win.com/v1/attachments/1589797711229407/85e6e32427f7c053a949d61997986451),里面包含了 SDK、 demo,开发者可以自己研读实践。
#
### 2.集成
将下载的 SDK 导入到项目并添加到 Targets -> General -> Embedded Binaries 里,如下图
![导入SDK](https://attachment.yun2win.com/v1/attachments/1589786596018679/75d9f95b8abf5d4d2c6f45deff9740ed)
> Embed 要选中 Embed & Sign
#
在需要使用的地方导入头文件:
~~~
#import <FRS_SDK/FRS_SDK.h>
~~~
> 目前仅支持真机运行
> Build Configuration 仅支持 Release
#
### 3.调用方式
~~~
- (void)viewDidLoad {
[super viewDidLoad];
// 创建实例
self.faceLogin = [[FRSFaceLogin alloc] initWithDelegate: self];
// 设置 accessToken (应从服务端获取)
[self.faceLogin setAccessToken: accessToken];
// 传入照片进行识别
[self.faceLogin validate: image];
}
// 在此设备首次识别成功会要求输入工号进行验证
- (void)handleConfirmForFaceLogin:(FRSFaceLogin *)faceLogin{
// 输入工号后调用 [self.faceLogin confirm: number] 进行验证
}
// 识别成功后会接收到一个临时 identityToken(5分钟有效期)
- (void)faceLogin:(FRSFaceLogin *)faceLogin didSuccessWithIdentityToken:(NSString *)identityToken{
// 获取 identityToken 后提交到服务端进行登录
}
// 调用时捕获到的一些事件需要处理
- (void)faceLogin:(FRSFaceLogin *)faceLogin handleEvent:(FRSFaceLoginEventCode)eventCode{
switch (eventCode) {
case FRSFaceLoginEventCodeAccessTokenInvalid:
case FRSFaceLoginEventCodeAccessTokenHasExpired:
// 获取并设置新 [self.faceLogin setAccessToken: accessToken]
// 然后继续调用 [self.faceLogin validate: image]
break;
case FRSFaceLoginEventCodeModuleDisabled:
case FRSFaceLoginEventCodeModuleNotFormal:
// 此类问题请到富源开放平台查看
break;
case FRSFaceLoginEventCodeNoFace:
// 没有在照片中找到人脸,使用新照片重试 [self.faceLogin validate: image]
break;
case FRSFaceLoginEventCodeNoMatchFace:
// 照片中存在人脸但不在安全处人脸库中,使用新照片重试 [self.faceLogin validate: image]
break;
case FRSFaceLoginEventCodeImageFormatError:
// 传入的图片格式无法识别,请检查图片是否正确
break;
}
}
// 执行失败,可能是网络错误或其它未知错误
- (void)faceLogin:(FRSFaceLogin *)faceLogin didFailWithError:(NSError *)error {
}
~~~
#
### 4.API
* FRSFaceLogin 类包含人脸登录的主要操作
* FRSFaceLoginDelegate 代理协议包含登录返回结果
* FRSFaceLoginEventCode 枚举包含登录异常的事件码
#
### FaceLogin 成员方法
#
### ◆ 设置 Token
```
- (void)setAccessToken:(NSString *)accessToken;
```
参数
name | 类型 | 说明
|-|-|-|
accessToken | NSString | 在 App 服务器端生成的用于鉴权的 accessToken |
>注解:
>* 在初始化 FRSFaceLogin 实例后应首先调用 setAccessToken 设置 accessToken。为保证 App 的安全性,App 客户端应请求 App 服务器端接口获取 accessToken(服务端端生成 accessToken,详见[从服务端生成 accessToken](https://help.yun2win.com/fuyuan-help/1700825#1_Accesstoken_0))。
>* 当 accessToken 无效(FRSFaceLoginEventCodeAccessTokenInvalid)或 accessToken 过期(FRSFaceLoginEventCodeAccessTokenHasExpired)时,客户端需要重新请求服务器获取 accessToken,并调用 setAccessToken 进行设置。
#
### ◆ 人脸验证
```
- (void)validate:(UIImage *)image;
```
参数
name | 类型 | 说明
|-|-|-|
image | NSString | 摄像头采集的图片 |
>注解:第一次调用 validate 之前,必须设置应用的 accessToken。
#
### ◆ 确认工号
```
- (void)confirm:(NSString *)uid;
```
参数
name | 类型 | 说明
|-|-|-|
uid | NSString | 员工工号 |
> 注解: 此方法仅能在触发 - (void)handleConfirmForFaceLogin:(FRSFaceLogin *)faceLogin 代理方法后使用,要求用户输入工号后调用 confirm 进行验证。
#
### FRSFaceLoginDelegate 代理方法
### ◆ 处理验证员工工号
```
- (void)handleConfirmForFaceLogin:(FRSFaceLogin *)faceLogin;
```
接收到此回调需要让用户输入员工工号,然后调用 confirm 进行验证。
> * 首次调用 validate 成功会触发 - (void)handleConfirmForFaceLogin:(FRSFaceLogin *)faceLogin 代理方法。
> * 用户在一个设备识别并验证成功后,下次就不会再触发 - (void)handleConfirmForFaceLogin:(FRSFaceLogin *)faceLogin 代理方法。
#
### ◆ 人脸验证通过
```
- (void)faceLogin:(FRSFaceLogin *)faceLogin didSuccessWithIdentityToken:(NSString *)identityToken;
```
人脸验证成功后会触发此回调
> identityToken 可用来获取用户信息。
#
### ◆ 人脸验证异常事件处理
```
- (void)faceLogin:(FRSFaceLogin *)faceLogin handleEvent:(FRSFaceLoginEventCode)eventCode;
```
调用 validate 时可能会接收到的异常事件,需要处理后再次调用 validate
| FRSFaceLoginEventCode 枚举值 | 描述 | 处理方式 |
| - | :-: | :-: |
| FRSFaceLoginEventCodeModuleDisabled | 模块已被禁用 | 开通模块 |
| FRSFaceLoginEventCodeModuleNotFormal | 模块还未申请正式 | 申请正式服务 |
| FRSFaceLoginEventCodeAccessTokenInvalid | accessToken 无效 | 实时更新 Token |
| FRSFaceLoginEventCodeAccessTokenHasExpired | accessToken 已过期 | 实时更新 Token |
| FRSFaceLoginEventCodeNoFace | 未检测到人脸 | 拍照重试 |
| FRSFaceLoginEventCodeNoMatchFace | 未找到匹配的人脸 | 拍照重试 |
| FRSFaceLoginEventCodeImageFormatError | 输入图片格式不正确 | 检查图片是否正常 |
#
### ◆ 人脸验证出现错误
```
- (void)faceLogin:(FRSFaceLogin *)faceLogin didFailWithError:(NSError *)error
```
执行失败,可能是网络错误或其它未知错误