react native 集成人脸识别 --ios

简介: 上一篇介绍了 android 端的集成这篇介绍下ios的集成.整体思路和android类似:ios原生这边集成sdk后,写个ios和RN的交互类,暴露给RN ,RN再调用 跳转人脸识别页。

上一篇介绍了 android 端的集成
这篇介绍下ios的集成.
整体思路和android类似:ios原生这边集成sdk后,写个ios和RN的交互类,暴露给RN ,RN再调用 跳转人脸识别页。成功,或失败 内部sdk中有回调,通过ios这边监听的触发 通知RN 成功或失败。

img_c0ba154a25e7b35fb77d9fde10538a65.png
image.png

1.sdk的集成。
2.ios和RN的交互

  1. sdk的集成:
    按照文档,把sdk 拷贝到工程目录,然后add files 到工程中。


    img_fc75d5830d38755eb0a623d95dd9d365.png
    image.png

按文档要求配置,导入相关的资源文件,架包等,新版的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 发消息吧:

首先我们同样建一个交互类,名字可以随便取,便于理解就行。


img_ae1537a0b8b4642a58bd0bd064c3b40c.png
image.png

.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();
  }
img_e1f7544e5d7c447847b207800542c78c.png
相关打印结果

ok,到这里整个流程成功了。感谢帮助过我的原生大佬飞哥,踩过RN和ios交互坑的 阿木木 。希望这篇文章能对大家有点用吧,少走点弯路.... 同时有错误的地方也可以指出来,谢谢!

目录
相关文章
|
7月前
|
前端开发 数据可视化 JavaScript
基于React的简易数据可视化图表库集成与应用
基于React的简易数据可视化图表库集成与应用
108 1
|
7月前
|
开发框架 前端开发 JavaScript
探索前端开发中的跨平台框架React Native
本文将介绍前端开发中一种备受关注的跨平台框架React Native,通过比较原生应用与React Native的优缺点,探讨其在实际项目中的应用以及未来发展趋势。
106 2
|
7月前
|
开发框架 前端开发 JavaScript
从零开始学习React Native开发
React Native是一种基于React框架的移动端开发框架,使用它可以快速地构建出高性能、原生的移动应用。本文将从零开始,介绍React Native的基础知识和开发流程,帮助读者快速入门React Native开发,并实现一个简单的ToDo应用程序。
|
25天前
|
数据采集 前端开发 开发工具
Demo发布- ClkLog客户端集成-React Native
ClkLog是一款支持开源和商业付费的用户行为分析软件系统,通过采集客户端行为日志数据,在开源的OLAP数据库上进行模型分析。常见的客户端有Web JS、IOS、Andriod 、小程序等,以及react-native 、uni-app等。Clklog方案选用了\神策提供的开源SDK来进行数据采集。
110 48
|
28天前
|
前端开发 JavaScript 测试技术
React 中集成 Chart.js 图表库
本文介绍了如何在 React 项目中集成 Chart.js 创建动态图表,涵盖基础概念、安装步骤、代码示例及常见问题解决方法,帮助开发者轻松实现数据可视化。
39 11
|
3月前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
65 3
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
159 0
|
4月前
|
iOS开发 Perl
IOS集成flutter_boost 3.0常见问题
IOS集成flutter_boost 3.0常见问题
79 0
|
6月前
|
人工智能 数据安全/隐私保护 iOS开发
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
|
6月前
|
机器学习/深度学习 定位技术 开发工具
必知的技术知识:ios个推推送集成
必知的技术知识:ios个推推送集成
113 0

热门文章

最新文章

下一篇
DataWorks