### 1.下載
下載 [ 人臉登錄 SDK ](http://attachment.yun2win.com/v1/attachments/1589797711229407/85e6e32427f7c053a949d61997986451),里面包含了 SDK、 demo,開發者可以自己研讀實踐。
#
### 2.集成
將下載的 SDK 導入到項目并添加到 Targets -> General -> Embedded Binaries 里,如下圖

> 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
```
執行失敗,可能是網絡錯誤或其它未知錯誤