React Native 实现热更新方案CodePush过程中遇到的问题 ( 搭建自己的CodePush服务器 )

前言

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安装, 配置MySQL, 配置config.js的local{}和commen{};
  • RN项目引入code-push, link, 在js界面中调用CodePush.sync()等执行热更新的方法;
  • RN的android项目中, Application文件中填写code-push-server中创建的应用的key以及server地址;
  • 命令行中:
    • 登录CodePushServer;
    • 添加项目;
    • release-react, 查看history;
  • 运行android项目, 先在Dev Setting中配置可以正常运行的ip+port, 运行成功一次后修改为不可访问的任意字符, 以便调试;
  • 命令行code-push release-react打包发布, 重启android程序查看效果;

这篇博客主要是记录一下自己集成过程中在各个步骤中遇到的问题.


遇到的问题及解决办法

  1. 自己搭建的code-push-server在打包发布过程中没有在code-push-server配置的data文件夹中生成bundle包:

    config.js(code-push-server文件夹下)中的commen.dataDir配置错误导致的 (恨不得抽自己两巴掌…)

  2. 打包发布成功后, 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 才能指定到相应版本.( 其实这个细节在参考文章中都提到过, 是我自己没有注意到 )

  3. 执行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就可以了.

  4. 测试热更新的时候需要重启APP, 不过重启的时候APP会自动从NodeJs中更新, 此时还未来得及使用热更新, 看不到效果:

    使用测试机时就算拔掉数据线, 如果手机连接的网络与电脑是一个局域网, app也会更新( 此时Live Reload都是生效的 ).
    我们可以在成功运行过一次后, 在 Dev Setting 中把 IP 修改为任意不可访问的字符, 让app连接不到电脑的NodeJs服务, 此时app就可以访问到 code-push-server 了, 你会发现, 不用数据线, IP也修改的乱七八糟, 只要手机网络可以连接到code-push-server的配置地址, 就能自动更新, 哈哈哈哈哈.
    对了, 这里还有一个需要注意的地方, !!不要打开 Live Reload, 否则会掩盖热更新效果!!.

你可能感兴趣的:(ReactNative)