学习文档: 卤蛋实验室 、分享 50 个完整的 React Native 项目
1 RN与原生端通信
官方文档:Android 原生模块
1.1 前言
React Native和客户端原生可以通过扩展React Native Module(下面简称原生模块接口)的形式进行通讯或增强React Native的功能,使用原生模块接口在两端之间进行通讯是异步的,所以所有的调用都是没有返回结果的,但是客户端可以通过回调的方式通知React Native。
1.2 使用
import { NativeModules } from 'react-native';
NativeModules.Core.openUrl() // 地址跳转
NativeModules.UI.toast() // toast弹窗
主要工作量在于原生端写好java代码,RN端直接调用即可。
2 CodePush
官方文档:CodePush
react-native-code-push:React Native 热更新
CodePush 是提供给 React Native 和 Cordova 开发者直接部署移动应用更新给用户设备的云服务。CodePush 作为一个中央仓库,开发者可以推送更新 (JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。CodePush 可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。
需要原生端(Android/iOS)和RN端进行配置,rn端主要api:
// 检测是否有更新包可用
codePush.checkForUpdate(deploymentKey: String = null, handleBinaryVersionMismatchCallback: (update: RemotePackage) => void): Promise<RemotePackage>;
// 获取本地最新更新包的属性
codePush.getCurrentPackage(): Promise<LocalPackage>;
// 重启app(即使不用在 Hot Updating,也挺有用的)
codePush.restartApp(onlyIfUpdateIsPending: Boolean = false): void;
// 手动进一次更新
codePush.sync(options: Object, syncStatusChangeCallback: function(syncStatus: Number), downloadProgressCallback: function(progress: DownloadProgress), handleBinaryVersionMismatchCallback: function(update: RemotePackage)): Promise<Number>;
简单步骤参考:RN 项目整合 CodePush 完全指南