背景

一般情况下,我们的 app 在升级新版本后,希望能提示用户去更新,那么就需要一整套的策略来提示用户更新。

结论

最终我们实现的效果是这样的:
在这里插入图片描述

  • 普通弹框更新用于一般的用户提示版本升级
  • 热更新用于线上bug紧急修复

为什么要这样做呢?
经过我们的调研,热更新有一些限制,比如更改原生代码无法热更新,热的版本是维护在pushy后台的,不能改原生代码里的版本号

如何知道需要更新了?

1、普通弹框更新则由后端接口控制

req:

  • 当前APP版本号信息:1.0.0
  • 设备型号:xiaomi、huawei
  • 设备系统类型:android、ios

res:

  • 是否需要升级
  • 升级模式 1-去应用市场进行更新 2-直接下载新版本安装包
  • 是否强制更新
  • 新的版本号
  • 新的版本描述
  • 安装包下载地址

这样配置的话就比较灵活了

2、热更新则由前端通过 pushy 后台控制
在这里插入图片描述

普通弹框更新-相关问题

app内下载原生包并安装?

rn-fetch-blob:
https://blog.csdn.net/zhenzhenzhen1705/article/details/108315739
react-native-fs:
https://github.com/itinance/react-native-fs
https://github.com/cjdell/react-native-fs-test/blob/master/index.common.js
https://www.jianshu.com/p/77e5bd98a7f1
多个文件自定义下载:
https://blog.csdn.net/weixin_42284466/article/details/84898859
比较完美的方案:(目前使用的这个)
https://github.com/songxiaoliang/react-native-app-upgrade
https://songlcy.blog.csdn.net/article/details/77189649
打开文件的包:
https://github.com/huangzuizui/react-native-file-opener
https://github.com/1556173267/react-native-apk-manager
不好用https://github.com/jerson/react-native-updater-util
android原生包教学:
https://reactnative.cn/docs/native-modules-android
原生包:
https://github.com/feicien/android-auto-update
https://blog.csdn.net/jiejiegua/article/details/71477378

android app如何跳到对应的应用市场?

这里应该通过判断机型跳转到对应的应用市场,如果非华为oppo小米,则使用方式1.1(或者跳腾讯应用宝等通用的市场)
跳应用市场
获取设备信息

ios app内如何跳转appstore?

Linking.openURL('itms-apps://itunes.apple.com/cn/app/id1587679026')

热更新-相关问题

热更新究竟能否上架?

以下是 pushy 官网说的:https://pushy.reactnative.cn/docs/faq.html
您可能听说过各种说法,但大量实践表明,热更新目前能够顺利上架 AppStore 和其他各种应用市场。唯一需要注意的是,在审核期间请不要发布热更新,不要让审核人员看到各种更新相关的提示和弹窗,即可顺利通过。

热更新方案选型?

https://github.com/reactnativecn/react-native-pushy
https://pushy.reactnative.cn/
选择官方推荐的pushy
步骤:
1、打包一个基础的android包
2、把包上传到pushy,同时这个包分发给用户使用,此时版本为代码中写死的版本
3、当需要更新包的时候,本地改代码后执行pushy的命令生成一个增量包上传到pushy后台,上传的时候可以命名版本,这个版本只保存在pushy后台
4、这时用户的app就会弹框是否更新

热更新之后版本怎么控制?

目前看来热更新的版本是维护在pushy后台的,并不能改原生代码里的版本号.

是否可以静默更新?

可以的,无非就是把本来要弹的框去掉,更新的时候支持两种方式:

  • 直接重启更新
  • 下次启动更新

每次app切换到前台(冷启动热启动)的时候,会触发检测更新,这个时候如果有更新则会静默更新,更新完成后,则看配置的是上面哪种更新模式:
1、如果是直接重启更新,那么页面会短暂的白屏零点几秒然后恢复(因为是重新加载了 js bundle),页面将变为新版本。
2、如果是下次启动更新,那么页面没有任何反应,除非下次冷启动的时候页面才会变为新版本。此方案是真正的无感知,但是用户感知到新版本的时机比较慢。

如何进行热更新测试?

因为免费版的 pushy 只能建三个应用,所以线上android ios各一个,测试只建一个 android 的。
在这里插入图片描述
这样的话,每次测试的时候,只需要用这个测试账号就行了。

其他问题

什么时候弹窗提示用户更新?

后台切换到前台的时候(冷启动热启动)
https://github.com/reactnativecn/react-native-pushy/blob/master/lib/simpleUpdate.js

如何判断应用是冷启动?

冷启动其实就是 App 层面的 useEffect

ios获取app store版本号等信息?

获取版本号等信息:https://itunes.apple.com/cn/lookup?bundleId=com.cmvalue.wisederma

Logo

智屏生态联盟致力于大屏生态发展,利用大屏快应用技术降低开发者开发、发布大屏应用门槛

更多推荐