React Native 全栈开发实战班 - 打包发布之热更新
在完成 React Native 应用的开发与性能优化后,下一步就是将应用打包并发布到各大应用市场,如 Apple App Store 和 Google Play Store。本章节已经详细介绍了打包与发布的流程,包括 Android 和 iOS 平台的配置、打包步骤、签名配置以及发布到应用市场。
3. 版本更新机制
在应用发布后,持续的版本更新是保持应用稳定、功能完善和用户体验良好的关键。React Native 应用可以通过多种方式进行版本更新,包括:
- 全量更新(Full Update): 用户需要下载并安装整个应用的新版本。
- 增量更新(Delta Update): 只下载和安装应用中有变化的部分。
- 热更新(Code Push): 通过远程服务器动态更新应用的 JavaScript 代码和资源,而无需重新发布应用。
本章节将重点介绍如何使用 CodePush 实现 React Native 应用的热更新。
3.1 热更新概述
热更新(Hot Update) 是一种在不发布新版本应用的情况下,更新应用代码和资源的技术。热更新可以显著缩短更新周期,提高用户体验,并减少应用商店审核的等待时间。
热更新的优势:
- 快速迭代: 可以快速发布新功能、修复 bug,无需等待应用商店审核。
- 用户体验: 用户无需重新下载整个应用,即可获取最新更新。
- 节省带宽: 只下载有变化的部分,减少用户流量消耗。
常见的热更新解决方案:
- CodePush: 由 Microsoft 提供的免费开源热更新服务,支持 React Native 和 Cordova。
- Expo Updates: Expo 提供的热更新服务,适用于使用 Expo 工具链的项目。
- 自建热更新服务: 使用第三方 CDN 或自建服务器,实现自定义的热更新流程。
本章节将重点介绍如何使用 CodePush 实现 React Native 应用的热更新。
3.2 使用 CodePush 实现热更新
CodePush 是一个由 Microsoft 提供的免费开源热更新服务,支持 React Native 和 Cordova 应用。它通过云端服务器分发应用的更新包,实现动态更新。
3.2.1 安装 CodePush CLI
首先,需要安装 CodePush CLI 工具。
npm install -g code-push-cli
3.2.2 注册 CodePush 账号
使用 CodePush CLI 注册一个 CodePush 账号。
code-push register
按照提示完成注册。
3.2.3 登录 CodePush
使用 CodePush CLI 登录。
code-push login
按照提示完成登录。
3.2.4 安装 CodePush SDK
在 React Native 项目中安装 CodePush SDK。
npm install react-native-code-push
链接原生依赖(React Native 0.60 及以上版本自动链接):
cd ios
pod install
cd ..
3.2.5 配置 CodePush
-
Android 配置:
-
在
android/app/build.gradle文件中,添加 CodePush 依赖:dependencies {...implementation project(':react-native-code-push')... } -
在
android/app/src/main/java/.../MainApplication.java文件中,添加 CodePush 配置:import com.microsoft.codepush.react.CodePush;@Override protected String getJSBundleFile() {return CodePush.getJSBundleFile(); }@Override protected List<ReactPackage> getPackages() {return Arrays.<ReactPackage>asList(new MainReactPackage(),new CodePush(getResources().getString(R.string.reactNativeCodePush_androidDeploymentKey), getApplicationContext(), BuildConfig.DEBUG),...); } -
在
android/app/src/main/res/values/strings.xml文件中,添加 CodePush deployment key:<string name="reactNativeCodePush_androidDeploymentKey">YOUR_ANDROID_DEPLOYMENT_KEY</string>
-
-
iOS 配置:
-
在 Xcode 中,打开项目,添加 CodePush 依赖:
-
打开
AppDelegate.m文件,添加 CodePush 配置:#import <CodePush/CodePush.h>- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge {return [CodePush bundleURL]; } -
在
Info.plist文件中,添加 CodePush deployment key:<key>CodePushDeploymentKey</key> <string>YOUR_IOS_DEPLOYMENT_KEY</string>
-
-
3.2.6 发布更新
-
构建发布版本:
npm run build:android npm run build:ios -
发布更新包:
code-push release-react <appName> <platform> -d <deploymentName> --des "更新描述"<appName>: CodePush 应用名称。<platform>: 平台名称,android或ios。<deploymentName>: 部署环境,Staging或Production。
示例:
code-push release-react MyApp-Android android -d Production --des "修复bug,优化性能" code-push release-react MyApp-iOS ios -d Production --des "修复bug,优化性能" -
查看更新历史:
code-push deployment history <appName> <deploymentName>示例:
code-push deployment history MyApp-Android Production code-push deployment history MyApp-iOS Production
3.2.7 强制更新
可以通过设置 mandatory 参数,强制用户更新应用。
示例:
code-push release-react MyApp-Android android -d Production --des "强制更新版本" --mandatory true
3.2.8 检查更新
在应用代码中,可以通过 CodePush API 检查更新并应用更新。
示例:
import React from 'react';
import { View, Text, StyleSheet, Button } from 'react-native';
import codePush from 'react-native-code-push';const MyApp = () => {const onCheckUpdate = () => {codePush.sync({updateDialog: {appendReleaseDescription: true,descriptionPrefix: '\n\n更新内容:\n',},mandatoryInstallMode: codePush.InstallMode.IMMEDIATE,});};return (<View style={styles.container}><Text style={styles.text}>欢迎使用 MyApp</Text><Button title="检查更新" onPress={onCheckUpdate} /></View>);
};
作者简介
前腾讯电子签的前端负责人,现 whentimes tech CTO,专注于前端技术的大咖一枚!一路走来,从小屏到大屏,从 Web 到移动,什么前端难题都见过。热衷于用技术打磨产品,带领团队把复杂的事情做到极简,体验做到极致。喜欢探索新技术,也爱分享一些实战经验,帮助大家少走弯路!
温馨提示:可搜老码小张公号联系导师
相关文章:
React Native 全栈开发实战班 - 打包发布之热更新
在完成 React Native 应用的开发与性能优化后,下一步就是将应用打包并发布到各大应用市场,如 Apple App Store 和 Google Play Store。本章节已经详细介绍了打包与发布的流程,包括 Android 和 iOS 平台的配置、打包步骤、签名配置以及发布到应…...
2024年11月16日 星期六 重新整理Go技术
今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…...
力扣第 55 题 跳跃游戏
力扣第 55 题 跳跃游戏(Jump Game)。题目要求判断一个非负整数数组中,是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…...
Golang | Leetcode Golang题解之第564题寻找最近的回文数
题目: 题解: func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …...
Spring Boot汽车资讯:科技与速度的交响
3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架,JAVA作为开发语言&#…...
从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望
作者:金峰(项良)、朱永林、赵世振(寰奕) 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月,是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…...
移动零
移动零 1、题目描述2、解答思路 1、题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 2、解答思路 已知数组后端若干元素为0&…...
C#编写的日志记录组件 - 开源研究系列文章
以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 使用; 后面的参数为级别设置,只有大于这个级别的才进行日志记录,限制了日志记录的…...
猎板PCB罗杰斯板材的应用案例
以下是几个猎板 PCB 与罗杰斯板材结合的具体案例: 案例一:5G 通信基站天线 PCB 在 5G 通信基站的天线系统中,对高频信号的传输和处理要求极高。猎板 PCB 采用罗杰斯板材,凭借其稳定的低介电常数(如 RO4003C 板材&…...
使用esp32c3开发板通过wifi连网络web服务器
实验基本拓扑就是: esp32c3开发板通过Wifi模块连上局域网,局域网一台服务器通过FastAPI提供8000端口的web服务,在esp32c3开发板中烧录micropython固件,在python交互模式下,连上Wifi模块,并使用socket模块获…...
供应链管理、一件代发系统功能及源码分享 PHP+Mysql
随着电商行业的不断发展,传统的库存管理模式已经逐渐无法满足市场需求。越来越多的企业选择“一件代发”模式,即商家不需要自己储备商品库存,而是将订单直接转给供应商,由供应商直接进行发货。这种方式极大地降低了企业的运营成本…...
Windows docker下载minio出现“Using default tag: latestError response from daemon”
Windows docker下载minio出现 Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded 此类情况,一般为镜像地址问题。 {"registry-mirrors": ["https://docker.re…...
工厂模式-简单工厂模式
1、简单工厂模式 在工厂类的静态方法中,根据要创建产品的type类型,通过if else来返回对应的对象 1.1定义产品抽象接口Product /*** @desc 产品抽象接口**/ public interface Product {void use(); } 1.2 定义具体的产品A和B /*** @desc 产品A**/ public class ProductA i…...
【linux】使用minicom调试串口
在Linux中使用minicom进行串口通信调试,你需要先确保已经安装了minicom。如果还没有安装,你可以使用包管理器进行安装,例如在Debian或Ubuntu系统上使用apt-get,在Red Hat或CentOS系统上使用yum或dnf。 安装完成后,你需…...
C# 异常处理、多个异常、自定义异常处理
C# 异常 异常是为处理异常的发生而设计的,这些特殊情况会改变程序执行的正常流程。 引发或引发异常。 在执行应用期间,许多事情可能出错。 磁盘可能已满,我们无法保存文件。 当我们的应用尝试连接到站点时,Internet 连接可能会断…...
【从零开始的LeetCode-算法】3210. 找出加密后的字符串
给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串: 对于字符串 s 中的每个字符 c,用字符串中 c 后面的第 k 个字符替换 c(以循环方式)。 返回加密后的字符串。 示例 1: 输入: s "dart&…...
redis linux 安装
下载解压 https://download.redis.io/releases/ tar -zvxf ----redis-7.4.1编译 进入目录下 # redis 依赖c yum install gcc-cmake可能会有问题,所以记得换源# 安装到 /usr/local/redis make PREFIX/usr/local/redis installcd src ./redis-serverredis.confi…...
springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...
【QNX】QNX侧如何抓取日志?
🦋slog2info 是 QNX 实时操作系统中的一个实用工具,用于读取和解析 QNX 的系统日志(System Logger v2,简称 slog2)。 🦋slog2 是 QNX 提供的用于记录系统和应用程序日志信息的服务,它比传统的 syslog 服务更加强大和灵活,能够处理大量日志信息,并提供高级的过滤和检…...
深度学习:计算卷积神经网络中输出特征图尺寸的关键公式
计算卷积神经网络中输出特征图尺寸的关键公式 在设计卷积神经网络(CNN)时,准确计算每个卷积层的输出特征图尺寸是至关重要的。这不仅关系到网络的结构设计,也直接影响参数优化和整体性能。适当的计算可以确保网络层正确连接&…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
