CodePush官方:
https://github.com/Microsoft/react-native-code-push
自搭建CodePushServer:
https://github.com/lisong/code-push-server
参考文章:
https://www.jianshu.com/p/417a165ca9d7
https://github.com/crazycodeboy/RNStudyNotes/tree/master/React Native应用部署、热更新-CodePush最新集成总结
上面两篇参考文章流程说的很详细了, 感谢分享.
大体总结一下主要流程:
这篇博客主要是记录一下自己集成过程中在各个步骤中遇到的问题.
自己搭建的code-push-server在打包发布过程中没有在code-push-server配置的data文件夹中生成bundle包:
config.js(code-push-server文件夹下)中的commen.dataDir配置错误导致的 (恨不得抽自己两巴掌…)
打包发布成功后, JS中执行了CodePush.sync()方法报错 [code push] An update is available but it is not targeting the binary version of your app
:
看说明是version不对, 发布的命令使用的是code-push release-react xxx android -t "1.0.0" --des "测试" --m true
, 但是忽略了android包中build.gradle中的versionName, 这里必须设置为类似 “1.0.0” 格式的三位数字, 发布命令中的指定生效version的选项 -t 才能指定到相应版本.( 其实这个细节在参考文章中都提到过, 是我自己没有注意到 )
执行CodePush.sync()方法报错 [code push] Network request failed
:
网络请求失败, 这是因为android的application中new CodePush(BuildConfig.CODE_PUSH_KEY, getApplicationContext(), BuildConfig.DEBUG, "http://192.168.73.111:3000/"),
后面的下载链接写错的原因.
注意这里的路径要与 code-push-server 的 config.js 中的 downloadUrl 保持一致, 比如 downloadUrl 是 http://192.168.73.111:3000/download , application 中必须设置为 http://192.168.73.111:3000/ . 而且注意, 此地址必须是测试机能访问到的地址, 可以是code-push-server暴漏的公网IP, 或者公司局域网的IP, 绝对不可以是 127.0.0.1 等本机路径, 否则手机中访问肯定是失败的. 这里可以填写平时RN调试时的地址, 把端口号换为3000就可以了.
测试热更新的时候需要重启APP, 不过重启的时候APP会自动从NodeJs中更新, 此时还未来得及使用热更新, 看不到效果:
使用测试机时就算拔掉数据线, 如果手机连接的网络与电脑是一个局域网, app也会更新( 此时Live Reload都是生效的 ).
我们可以在成功运行过一次后, 在 Dev Setting 中把 IP 修改为任意不可访问的字符, 让app连接不到电脑的NodeJs服务, 此时app就可以访问到 code-push-server 了, 你会发现, 不用数据线, IP也修改的乱七八糟, 只要手机网络可以连接到code-push-server的配置地址, 就能自动更新, 哈哈哈哈哈.
对了, 这里还有一个需要注意的地方, !!不要打开 Live Reload, 否则会掩盖热更新效果!!.