團(tuán)隊里接到一個雙端app的外包項目,需要刷臉登錄功能。
雙端嘛,就想到用react-native寫會省很多人力。
但是SDK都是原生的,所以本文要講的是在原生處完成刷臉登錄后就跳轉(zhuǎn)到react的頁面。從而讓你的react項目有刷臉登錄功能。
1.創(chuàng)建react-native項目
1.創(chuàng)建完成后的目錄是這樣的:

2.打開MyApp.xcodeproj,進(jìn)到AppDelegate.m

這里其實是設(shè)置程序啟動后就直接來到react的窗口,我們把它抽出來,然后改為iOS原生那樣子的加載方式。
新建一個Login.storyboard的故事板,然后添加一個控制器,在控制器添加一個按鈕監(jiān)聽登錄事件。

然后記住把Main interface設(shè)置為Login,即程序啟動時進(jìn)入剛剛我們創(chuàng)建的登錄頁面,而不是react頁面。

3.把appdelegate.m文件里加載react-native的代碼抽到登錄頁面的控制器,記住也要把頭文件搬過去。
把這部分代碼剪切

放到LoginViewController里,寫成一個gotoReactNative的方法

其中l(wèi)aunchOptions會報錯,改為nil就行。還有用UIApplication.sharedApplication.delegate獲取窗口把根控制器換掉就OK啦!

然后在登錄按鈕里直接調(diào)用這個方法,就完成里從原生登錄完,跳轉(zhuǎn)到react-native里的操作。

到這里已經(jīng)完成了在原生登錄完跳到react-native里這樣一個需求。要加入人臉識別,需要借助第三方,請往下看。
2.注冊一登開發(fā)者賬號
1.注冊地址:http://www.superid.me/developer/index.html
2.創(chuàng)建一個應(yīng)用,iOS里的Bundle Identifier填寫剛剛react-native項目iOS里的Bundle Identifier。

3.下載SDK和將SDK導(dǎo)入react-native的iOS項目里。下載地址:https://github.com/SuperID/superid-ios-sdk

直接把SDK拖到項目里就行。參考文檔:http://www.superid.me/developer/document-ios/ios_quickstart.html
4.項目中添加-ObjC、-lstdc++編譯選項。

5.iOS10 適配,增加相機(jī)、相冊權(quán)限說明.在項目 Info.plist 源碼文件中拷貝入下內(nèi)容:
<key>NSCameraUsageDescription</key>
<string>需要使用您的相機(jī)進(jìn)行刷臉認(rèn)證</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>一登需要訪問您的相冊</string>
6.初始化 SDK
首先:在AppDelegate.m文件中,導(dǎo)入 SuperID SDK頭文件。
#import"SIDHeader.h"
接著,在 app delegate 方法中添加如下初始化代碼:
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {??
? [SuperIDregisterAppWithAppID:@"AppID"withAppSecret:@"AppSecret"];//開啟一登SDK的調(diào)試模式,開發(fā)者在Release時,將該模式設(shè)置為NO.
[SuperIDsetDebugMode:YES];//設(shè)置一登 SDK 的語言模式,默認(rèn)為自動模式。
[SuperIDsetLanguageMode:SIDAutoMode];
returnYES;
}
將appid和appsecret換成你一登應(yīng)用的appid和appsecret。
7.在LoginViewCtroller里添加一個faceLogin的方法,加入以下代碼:

代碼如下:
-(void)faceLogin{
[SIDCoreLoginKitshowLoginViewControllerWithAppUserInfoModel:nilresponseBlock:^(NSDictionary*result,NSError*error) {
if(!error) {
//授權(quán)登錄成功
NSLog(@"userInfo:%@", result);
NSLog(@"登錄成功!");
[selfgotoReactNative];
}else{
//授權(quán)登錄失敗
NSLog(@"Login Fail Error =%ld,%@",(long)[errorcode],[errorlocalizedDescription]);
NSLog(@"登錄失?。?);
}
}];
}
8.在剛剛的登錄按鈕里點擊監(jiān)聽faceLogin這個方法。

到這里,刷臉登錄完成跳轉(zhuǎn)到react-native里就大功告成啦?。?!
你可以那真機(jī)開開心心測試一下!
注意:一定要拿真機(jī)測試?。?!一定要拿真機(jī)測試!?。∫欢ㄒ谜鏅C(jī)測試?。?!
因為這里用到了攝像頭?。?!
3.效果圖:
