react native 集成人脸识别 --ios
上一篇介绍了 android 端的集成
这篇介绍下ios的集成.
整体思路和android类似:ios原生这边集成sdk后,写个ios和RN的交互类,暴露给RN ,RN再调用 跳转人脸识别页。成功,或失败 内部sdk中有回调,通过ios这边监听的触发 通知RN 成功或失败。
1.sdk的集成。
2.ios和RN的交互
-
sdk的集成:
按照文档,把sdk 拷贝到工程目录,然后add files 到工程中。
按文档要求配置,导入相关的资源文件,架包等,新版的Xcode 在我们 导入sdk的时候回自动添加 这些相关资源。
集成之后 就是 ios原生这边写方法跳转到这个人脸识别页面,然后把这个方法暴露给RN 去调用。
2.1这里着重介绍下RN 和 ios的交互。
首先我们在工程中新建一个类 如何新建可参考 简书中有介绍过ios的.h .m文件
然后.h文件 去实现 “RCTBridgeModule”协议的Objective-C类
#import <Foundation/Foundation.h> #import <React/RCTBridgeModule.h> #import <React/RCTLog.h> @interface testRn : NSObject <RCTBridgeModule> @end
.m文件 官网是这样说的:为了实现RCTBridgeModule协议,你的类需要包含RCT_EXPORT_MODULE()宏。这个宏也可以添加一个参数用来指定在Javascript中访问这个模块的名字。如果你不指定,默认就会使用这个Objective-C类的名字。
@implementation testRn RCT_EXPORT_MODULE(test); //这里可以填写 模块的名字 不写的话默认类名 //给Javascript导出的方法 这个方法有几个参数RN 那边调用的时候就传几个参数要不然会报错。用不到传参 也可以不写。 RCT_EXPORT_METHOD(start:(NSString *)name location:(NSString *)location) { //这里触发人脸识别跳转 //具体怎么跳转官方发的sdk的demo都有些,拷贝进来修改下就行了 } @end
到这里RN 调用原生已经可以了,接下来就是 监听识别成功或失败的回调,告诉RN。
2.2这里就叫ios给RN 发消息吧:
首先我们同样建一个交互类,名字可以随便取,便于理解就行。
.h文件
#import <Foundation/Foundation.h> #import <React/RCTBridgeModule.h> #import <React/RCTLog.h> #import <React/RCTBridge.h> #import <React/RCTEventEmitter.h> @interface EventEmitterManager : RCTEventEmitter <RCTBridgeModule>
.m文件
#import "EventEmitterManager.h" @interface EventEmitterManager() @end NSString *const kEventEmitterManagerEvent = @"EventEmitterManagerEvent"; @implementation EventEmitterManager - (instancetype)init { self = [super init]; if (self) { //新增监听 有多个监听就写多个 return 的时候返回多个 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiMethd:) name:@"CallBackMsg" object:nil]; } return self; } RCT_EXPORT_MODULE() //把方法导出给RN 没有就默认类名 - (void)notiMethd:(NSNotification *)notiMethd { NSDictionary *resultDic = notiMethd.userInfo; NSString *base64Encoded = resultDic[@"base64Encoded"]; NSString *key = resultDic[@"key"]; [self sendEventWithName:@"CallBackMsg" body:@{@"base64Encoded":base64Encoded,@"key":key}]; //发消息给RN } - (NSArray<NSString *> *)supportedEvents { return @[@"CallBackMsg"]; //如果有多个监听 这里加上例如: return @[@"CallBackMsg",@"CallBackMsg2"]; } @end
其他模块触发监听:
//注意:监听的名字要一致,成功之后不要忘记关闭当前页 //触发ios监听 [[NSNotificationCenter defaultCenter] postNotificationName:@"CallBackMsg" object:nil userInfo:@{@"base64Encoded":@"",@"key":@"success"}]; //关闭当前页面 [self dismissViewControllerAnimated:YES completion:nil];
ios这边的方法我们已经写好了,下面看下RN 这边如何使用
import { Platform, NativeEventEmitter, NativeModules, DeviceEventEmitter, } from 'react-native'; .......... componentDidMount() { let EventEmitterManager = NativeModules.EventEmitterManager; let eventEmitterManagerEmitter = new NativeEventEmitter( EventEmitterManager, ); this.reciveIosMsg = eventEmitterManagerEmitter.addListener( 'CallBackMsg', result => { if (result.key === 'success' && result.base64Encoded != '') { //做相关成功处理 } }) } componentWillUnmount() {//删除监听 this.reciveIosMsg.remove(); }
ok,到这里整个流程成功了。感谢帮助过我的原生大佬飞哥,踩过RN和ios交互坑的 阿木木 。希望这篇文章能对大家有点用吧,少走点弯路.... 同时有错误的地方也可以指出来,谢谢!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云小蜜获评"智能客服技术产品/解决方案大类推荐品牌"
7月24日,由客户世界机构主办,中国呼叫中心与电子商务发展研究院、全球呼叫中心产业联盟联合支持的客户世界• 洞察者2018北京论坛在丽景湾国际酒店圆满举行。作为全球领先的智能客服产品及方案提供商,阿里云小蜜获得本次大会主办方颁发的“智能客服技术产品/解决方案大类推荐品牌”奖项。 现场揭晓的“智能客服技术产品/解决方案大类推荐品牌”的获奖企业,历经初评、复评环节,通过《客户世界》杂志社资深编辑团队、编委成员(杂志顾问委员会和编辑委员会委员)的观察和体验,通过读者评议、网站投票、专家评委等多项指标,最终决出11家推荐品牌。 阿里云小蜜此次获评“智能客服技术产品/解决方案大类推荐品牌”,实际上是对阿里云在智能客服领域未来发展趋势的准确预判,以及就此展开的业务布局的一种认可。在过去的几年中,无论是产品技术创新,还是加速赋能行业等领域,阿里智能
- 下一篇
担心在机场丢行李?这个日本AI能帮你到处找包
在机场火车站丢行李是怎样的体验? 顺着自己来的方向回去找一遍?四处联系工作人员求助?或者干脆因为行李证件丢失而错过航班,不得不开始复杂的补办流程? 太可怕了,不如我们请个AI来帮我们找行李吧。 这种帮你找行李的AI还真有。日本的日立集团就做研发了这样的一套计算机视觉系统,可以将公共场所摄像头拍下的内容通过神经网络分析,识别人和物体整体的特征,追踪个体的运动轨迹。也就是说,把你丢包的一路上的视频都自动检查一遍,依次进行判断: 哦,你上厕所出来忘记拿包了。 实时追踪:不仅能找包,还能找人 如果仅仅是在大量视频中找到包包,这个目标检测的方法似乎并没有什么难度。 但是,日立这套系统的关键点在于,它可以实现实时追踪个体。比如,跟着父母出门的小孩子走丢了,只要在这套系统中输入小孩子的特征,比如身高、发型、穿什么颜色的衣服,就可以自动通过摄像头影像在整个
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19