本节摘要:上线不是结束,是守护的开始。本节处理三件长期的事:安全(密钥不进代码、存储分级、混淆加固)、合规(数据最小化与隐私清单)、监控(崩溃与性能的线上观测闭环),最后给出 RN 项目的版本升级策略——框架每年换代,应用如何跟得上而不翻车。作为全册最后一节,它也是前面所有章节知识的「战备检查」:线程、权限、构建、发布的知识在这里合流成一套日常制度。
反例开场警醒一下:某团队的接口鉴权密钥被硬编码在 JS 包里,包经 8.1 的流程发布后,任何人解包检索字符串都能拿到——密钥泄露导致接口被刷,团队排查了一周才找到源头。安全事件的特点与性能事故一样:写代码时埋的雷,上线后才炸,而守护制度的价值就是把「炸」变成「早发现、小爆炸」。
安全清单分三层。密钥层:密钥永不进代码库,构建时经环境变量注入,且要区分「可进客户端的公钥类配置」与「绝不能进客户端的服务端密钥」——后者根本不该出现在 RN 工程里,它属于你的服务器。存储层:用户敏感数据(令牌、证件信息)用系统级安全存储(iOS 的钥匙串、Android 的密钥库体系),普通偏好与缓存才用 4.3 的键值存储,两级别混用是最常见的偷懒事故。代码层:发布构建开启压缩与混淆,Hermes 字节码本身已大幅提高 JS 逆向门槛,Android 侧再对原生层启用代码收缩,双管齐下让解包者只能看到「懂了但改不动」的形态。
隐私合规的要点不是背法条,而是立一条工程原则:数据最小化——能不收集就不收集,收集必报备,使用有边界。落到清单上四项:权限申报与实际使用一致(7.3 的文案与行为对齐);三方 SDK 盘点入册(每个 SDK 收集什么、用于什么,8.3 提过的连带权限在此对账);隐私政策与代码行为一致(声明不收集的绝不偷偷收集,审核与监管都会实际验证);儿童与敏感场景遵循更严格档位。合规是持续义务不是一次性材料——每次接入新 SDK、新增权限,清单都要动。
开发期的仪器(第 6 章)到了线上要换一套:用户不会替你开性能监视器。线上监控的三个层次:崩溃捕获——JavaScript 异常与原生崩溃分别捕获上报,原生侧要配合符号表才能还原堆栈(发布产物对应的符号文件按版本归档,这是 8.3 签名资产清单里的另一件要保管的资产);自定义错误边界——界面局部崩溃时降级展示而不是白屏,同时把错误上报;性能埋点——启动耗时、关键页帧率、接口成功率,构成 8.3 灰度熔断器的数据源。监控闭环如下图。

错误边界的实现很短,值得全文背下来——它是「局部崩溃不白屏」的最后一道防线:
import React from 'react'; import { View, Text } from 'react-native'; import { reportError } from './monitor'; export class GuardBoundary extends React.Component { state = { failed: false }; // 捕获渲染期异常:降级为占位界面而非整页白屏 static getDerivedStateFromError() { return { failed: true }; } // 同步上报:带上组件栈便于定位 componentDidCatch(error, info) { reportError(error, { componentStack: info.componentStack }); } render() { if (this.state.failed) { return <Text>该模块暂时无法显示,其他功能不受影响</Text>; } return this.props.children; } }
RN 的版本节奏是每年若干个功能版加常态补丁版,长期不升级的工程会被生态(依赖库对新架构与新引擎的适配)倒逼还债。务实的策略是「小步跟上」:补丁版随发随升(风险低收益高),功能版每年规划一次升级窗口,跳版升级(跨多个功能版一步到位)要按 1.1 升级案例的纪律执行——升级辅助工具生成差异清单、原生依赖逐个核对、双端真机回归核心链路。把升级当作年度例行工程而不是危机响应,是维护成本最低的姿态。
监控本身也要合规——上报什么、怎么上报,同样受数据最小化原则约束。分级上报是务实做法:崩溃堆栈与设备画像(机型、系统版本)属于必要信息,直接采集;页面路径与操作序列有助于复现,采集前做截断与聚合;用户身份信息、输入内容、接口参数一律不采集——「为了排查方便多传点」是合规红线上的典型滑坡。日志脱敏要在客户端完成而不是服务端补救:脱敏前数据一旦出了设备,责任就已经成立。另外,上报频率要有节制(同型错误聚合去重、低电量与弱网时静默排队),监控不应当成为它要守护的性能的敌人——这句话值得写在监控模块的注释里。
背景:某版本灰度百分之十时,监控报告特定机型群崩溃率异常抬升,集中在商品详情页。操作:按闭环走——堆栈聚合定位到原生模块的一次空引用(7.1 模块在特定系统版本的行为差异);确认热修复条件成立(根因在 JS 侧的防御缺失),按 8.3 快速轨打出热更包;灰度人群先行验证,崩溃率回落后再全量;复盘把「参数为空」沉淀为该模块的必测用例,模块入口加防御校验。结果:从捕获到全量修复在同一天完成,正式版本发布前缺陷已免疫。解读:这次处置动用了全册的储备——2.1 的线程与模块知识定位、6 章的监控口径、7 章的双端差异意识、8.3 的快速轨纪律。守护不是单独的技能,是前面所有章节的战备状态。变式:若崩溃发生在原生层深处,快速轨失效,处置就退回「熔断放量加热修版本加急审核」,周期以天计——再次说明关键路径的防御要前移到代码纪律,而不是事后救援。
到这里,本册「组件两端开花」的旅程走完了。回望全程:第 1 章选种(选型与起步),第 2 章看根(架构),第 3、4、5 章育干与枝(组件、状态、导航),第 6、7 章抗风防虫(性能与桥接),第 8 章摘果存种(交付与守护)。贯穿其中的方法论只有一句:同一份组件,两片土壤,差异要被看见、被翻译、被管理。愿你在两端都种出让人满意的花。