使用Expo OTA后,如何为React Native Firebase Analytics设置app_version?
Expo OTA更新与Firebase Analytics版本显示问题解答
一、Expo的app_version固化机制确认
- 没错,Expo项目里的
app_version(对应package.json的version字段)是在构建二进制安装包(IPA/APK/AAB)时就固化到原生代码里的。OTA更新只替换JS代码和静态资源,根本碰不到原生二进制里的版本信息——所以哪怕你在推送OTA时把package.json的version升到v4.0.1,用户设备上的原生版本号还是当初构建v4.0.0二进制时的数值,这就是Firebase和调试里都显示旧版本的原因。 - 这里得明确两个版本的区别:
- 原生版本号:由app.json/app.config.js里的
version、android.versionCode、ios.buildNumber控制,只有重新打包提交应用商店才会更新,Firebase默认抓取的就是这个版本。 - OTA更新版本:用package.json的version作为runtimeVersion,用来匹配对应的二进制包,但这个版本只在Expo更新体系里生效,不会同步到原生层。
- 原生版本号:由app.json/app.config.js里的
二、手动指定Firebase Analytics中的版本方案
要让Firebase能识别OTA更新后的版本,不能依赖原生默认版本,得自己加自定义维度:
- 先去Firebase控制台创建一个自定义维度,比如叫
ota_app_version。 - 在项目里,每次启动时读取package.json的version,把它设为Firebase的用户属性:
import { getAnalytics, setUserProperties } from 'firebase/analytics'; import packageJson from './package.json'; const analytics = getAnalytics(); // 设置OTA版本作为自定义属性 setUserProperties(analytics, { ota_app_version: packageJson.version }); - 之后在Firebase的报表里,就能通过这个自定义维度查看不同OTA版本的数据了。
三、关于手动修改app_version的说明
- 原生层面的app_version没法通过OTA更新修改,必须重新构建二进制包,更新app.json里的版本配置,再提交应用商店,才能让原生版本号更新,进而让Firebase默认显示这个新版本。
- 如果只是为了区分不同OTA更新的用户,用上面的自定义维度方案就足够,没必要频繁发新的二进制包。
内容的提问来源于stack exchange,提问作者Dav
相关产品推荐
相关产品推荐

