安装RN可参考文档RN环境安装参考
npx react-native init XXX
等待RN项目创建完成,终端进入项目iOS文件夹下,先在终端输入bundle install
,此时会创建CocoaPods环境,然后执行命令:pod install
这里以导出后向RN回传导出地址为例子,
在RN的import
中添加NativeEventEmitter
添加监听回调函数,用来监听原生向RN回调信息
EOCustomEventEmitter
为iOS向RN传递消息的类,继承RCTEventEmitter
,该类必须以**单例
**的方式初始化对象;DataReceived
是方法名字。具体的可参考demo中的EOCustomEventEmitter
RNEffectModule是RN与原生iOS交互的类,负责处理按钮点击与iOS交互;
reacNativeWithActionName是按钮点击的方法,通过传递的参数(Record、Draft、Duet)来确定点击的是哪个按钮
EOCustomEventEmitter负责iOS向RN传递消息
import React from 'react'; import { SafeAreaView, ScrollView, StatusBar, StyleSheet, View, Button, NativeModules, useColorScheme, NativeEventEmitter, } from 'react-native'; import MainNavigation from './src/navigation/MainNavigation'; import {store} from './src/redux/store'; import {Provider} from 'react-redux'; import {Colors, Header} from 'react-native/Libraries/NewAppScreen'; function App() { const isDarkMode = useColorScheme() === 'dark'; const backgroundStyle = { backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, }; // 构造原生交互模型 const RNEffectModule = NativeModules.RNEffectModule; // 添加原生向RN传递消息监听 const EOCustomEventEmitter = NativeModules.EOCustomEventEmitter; const eventEmitter = new NativeEventEmitter(EOCustomEventEmitter); const subscription = eventEmitter.addListener('DataReceived', (data) => { console.log('Received data from iOS:', data); }); return ( <SafeAreaView style={backgroundStyle}> <StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} backgroundColor={backgroundStyle.backgroundColor} /> <ScrollView contentInsetAdjustmentBehavior="automatic" style={backgroundStyle}> <Header /> <View style={{ backgroundColor: isDarkMode ? Colors.black : Colors.white, }}></View> <View> <Button //拍摄按钮 title="Record" onPress={() => RNEffectModule.reacNativeWithActionName('Record')} color="#f54343" /> <Button //草稿箱按钮 title="Draft" onPress={() => RNEffectModule.reacNativeWithActionName('Draft')} backgroundColor="#999999" /> <Button //视频合拍按钮 title="Duet" onPress={() => RNEffectModule.reacNativeWithActionName('Duet')} backgroundColor="#666666" /> </View> </ScrollView> </SafeAreaView> ); } export default App;
EOExportUI
、EOExportUI.podspec
、EOLocalResources.bundle
的拖进到你自己的项目iOS文件夹中EffectOneModule.h
、EffectOneModule.m
、RNEffectModule.h
、RNEffectModule.m
、EOCustomEventEmitter.h
、EOCustomEventEmitter.m
文件拖进到你项目中AppDelegate文件所在位置双击你项目中的xxx.xcworkspace
文件(如果没有xxx.xcworkspace
文件,可能因为步骤2.2中没有点击y导致,参考步骤2.2.1)
EOLocalResources.bundle
文件到Xcode中,这个文件是资源文件将Xcode中的BundleId换成:com.volcengine.effectone.inhouse
//是否允许App访问您的媒体资料库 <key>NSAppleMusicUsageDescription</key> <string>This app lets you browse your media library.</string>//写出自己说明描述 //是否允许App使用您的相机 <key>NSCameraUsageDescription</key> <string>This app uses the camera to capture photos and videos.</string>//写出自己说明描述 //是否允许App您的麦克风 <key>NSMicrophoneUsageDescription</key> <string>This app uses the microphone to record videos with audio.</string>//写出自己说明描述 //是否允许App保存图片到手机 <key>NSPhotoLibraryAddUsageDescription</key> <string>This app lets you browse and edit your videos in photo library.</string>//写出自己说明描述 //是否允许App您的相册 <key>NSPhotoLibraryUsageDescription</key> <string>This app lets you browse and edit your videos in photo library.</string>//写出自己说明描述
如果没有PodFile文件可能因为步骤2.2中没有点击y导致,参考步骤2.2.1
PodFile文件中添加依赖的其他组件,如下所示
pod 'EOExportUI', :path => './' pod 'EffectOneKit', '1.2.0', :source => 'https://github.com/volcengine/volcengine-specs'
在终端进入项目的iOS目录下,执行命令:pod install
至此,RN集成EffectOne完毕,可以在Xcode中运行你的项目了
在模拟器运行时,终端RN项目根目录下,执行npx react-native run-ios
或者yarn react-native run-ios
(如果安装了yarn
)。注意:模拟器运行时不要链接真机,否则可能导致运行失败。
真机运行需要配置开发者证书,iOS开发者都会处理,这里不在赘述。配置好证书后,进入RN项目iOS文件中,双击xxx.xcworkspace打开项目,在Xcode中运行项目,参考文档