iOS開發實戰 - 接入阿里雲人臉識別SDK

1.“雲盾·實人認證”

https://help.aliyun.com/document_detail/57570.html?spm=a2c4g.11186623.6.539.CUVfsa
使用這個服務需要先去阿里雲開通,開通免費,使用收費, 計費說明

2.認證方案

https://help.aliyun.com/document_detail/61362.html?spm=a2c4g.11186623.6.545.JjOW73
這裏我們項目選用的是人臉驗證,接入方式是:RPBioID

RPBioID

系統時序圖
3.無線端接入 (這裏介紹iOS端)
3.1 下載無線SDK:https://help.aliyun.com/document_detail/59341.html?spm=a2c4g.11186623.6.568.x5dPRG

注意:這裏需要先登陸阿里雲賬號,並開通“雲盾·實人認證”功能,然後上傳自己項目的ipa包,阿里會給你生成一個定製版的SDK,具體步驟可以去看上方鏈接;
️第一個坑:下載下來的SDK不是zip格式的,是exec格式的,不能直接解壓,在mac上也沒找到合適的解壓工具,如果你們找到了合適的解壓工具,一定要告訴我,非常感謝;


看到後是不是懵逼了?

解決辦法:可以在windows上右擊文件通過解壓工具打開(如:winrar),然後就能拿到裏面的依賴包,和資源文件;

3.2 iOS集成:https://help.aliyun.com/document_detail/57932.html?spm=a2c4g.11186623.6.570.JOzYu9d
3.2.1 引入外部依賴
可以把外部依賴和資源文件放在一個文件夾中一次引入
3.2.2 引入系統依賴和編譯配置,略 - 相關鏈接
3.2.3 先編譯一下吧,如果沒問題的話,那就萬事具備,只欠調用了,直接跳到下一步;

看一下我的編譯報錯:


顯示有4個重複的對象,SecurityEnvSDK和SGMain

去一探究竟吧:


位於pods中的友盟推送的SecurityEnvSDK.framework

SGMain.framework

這樣看起來兩個framework內容也不一樣啊,怎麼辦呢,也沒有存在相同的文件,難道要刪除其中一個framework嗎?刪除哪一個呢,刪除SGMain.framework肯定不行,人臉識別肯定需要用到,那就找技術問一下吧,網頁諮詢客服和一通電話之後,聯繫到了阿里的技術小哥哥,加了釘釘,開始諮詢問題;
諮詢截圖

把SecurityEnvSDK.framework從pods中移除之後,又出現了新的報錯,沃特法克


lALPBbCc1cggXdrM8M0FeA_1400_240.png

諮詢截圖 - link中並沒有SecurityEnvSDK的影子
解決辦法
發現在.debug.cconfig和.release.cconfig中並沒有把"SecurityEnvSDK刪除掉"
找到上圖畫線部分的SecurityEnvSDK.framework,並刪除,我這裏已經移除了

到此,編譯成功,以後如果刪除pods中的依賴庫,就需要注意上面的坑;

3.2.4 接下來去測試了一遍推送,還好沒受到影響,然後去調用人臉識別測試把;
示例代碼

因爲認證前和認證後需要通知後臺去查詢獲取認證資料,並且項目中需要多個地方調用,所以我封裝了認證類代碼:

#import <Foundation/Foundation.h>
#import <RPSDK/RPSDK.h>

@interface RealPeopleCertification : NSObject

+ (RealPeopleCertification *)shareInstance;

- (void)startRealPeopleCertificationWithVC:(UINavigationController *)navigationController result:(void (^)(BOOL isSuccess))result;

@end
#import "RealPeopleCertification.h"

@implementation RealPeopleCertification

+ (RealPeopleCertification *)shareInstance {
    static RealPeopleCertification *realPeopleCertification;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        realPeopleCertification = [[RealPeopleCertification alloc]init];
    });
    return realPeopleCertification;
}

#pragma mark - 實人認證
- (void)startRealPeopleCertificationWithVC:(UINavigationController *)navigationController result:(void (^)(BOOL isSuccess))result {
    [YQHttpRequest getHeaderData:nil url:@"/user/getVerifyToken" success:^(id responseDic) {
        if ([[responseDic allKeys] containsObject:@"token"]) {
            NSString *ticketId = responseDic[@"ticketId"];
            NSString *certToken = responseDic[@"token"];
            //開始實名認證
            [RPSDK start:certToken rpCompleted:^(AUDIT auditState) {
                NSLog(@"verifyResult = %ld",(unsigned long)auditState);
                BOOL auditResult = NO; 
                if (auditState == AUDIT_PASS) { //認證通過
                   auditResult = YES;
                   //通知後臺去獲取用戶認證資料
                   [self certificationSuccessWithTicketId:ticketId];
                } else if (auditState == AUDIT_FAIL) { //認證不通過
                   [MBProgressHUD showError:@"認證失敗"];
                } else if (auditState == AUDIT_IN_AUDIT) { //認證中,通常不會出現,只有在認證審覈系統內部出現超時,未在限定時間內返回認證結果時出現。此時提示用戶系統處理中,稍後查看認證結果即可。
                   [MBProgressHUD showError:@"認證中"];
                } else if (auditState == AUDIT_NOT) { //未認證,用戶取消
                   [MBProgressHUD showError:@"取消認證"];
                } else if (auditState == AUDIT_EXCEPTION) { //系統異常
                   [MBProgressHUD showError:@"系統異常"];
                }

                if (result) {
                    result(auditResult);
                }
            } withVC:navigationController];
        } else {
            //該用戶已經認證
            if (result) {
              result(YES);
            }
        }
    } fail:^(NSError *error) {
        if (error) {
          [MBProgressHUD showError:@"請求失敗"];
        }
    }];
}

#pragma mark - 認證成功,通知後臺查詢獲取認證資料
- (void)certificationSuccessWithTicketId:(NSString *)ticketId {
    NSDictionary *dataDic = @{@"ticketId":ticketId};
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dataDic options:NSJSONWritingPrettyPrinted error:nil];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [YQHttpRequest postBodyData:jsonString url:@"/user/realPersonAuthentication" success:^(id responseDic) {
          
    } fail:^(NSError *error) {
        if (error) {
          [MBProgressHUD showError:@"請求失敗"];
        }
    }];
}

@end

接下來直接在需要判斷實人認證的控制器中引入頭文件,調用即可;

if ([HYXTools getLoginStatusWithUrl:@""]) {
  [[RealPeopleCertification shareInstance] startRealPeopleCertificationWithVC:wself.navigationController result:^(BOOL isSuccess) {
    if (isSuccess) { //認證通過

    } else { //認證失敗

    }
  }];
}
項目演示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章