美文网首页
ReactNative使用CodePush热更新文档(Andro

ReactNative使用CodePush热更新文档(Andro

作者: moreFine | 来源:发表于2017-07-15 18:19 被阅读355次

    此文档是在以前公司使用RN时(安卓同事)总结的,现在放上来供需要的同学参考。

                                                                                 React Native热更新(CodePush

    一、CodePush简介

    CodePush是微软提供的一套用于热更新React Native和Cordova应用的服务。

    CodePush是提供给React Native和Cordova开发者直接部署移动应用更新给用户设备的云服务。CodePush作为一个中央仓库,开发者可以推送更新(JS, HTML, CSS and images),应用可以从客户端SDK里面查询更新。CodePush可以让应用有更多的可确定性,也可以让你直接接触用户群。在修复一些小问题和添加新特性的时候,不需要经过二进制打包,可以直接推送代码进行实时更新。

    二、操作步骤

    1)安装CodePush CLI

    在终端输入npm install -g code-push-cli,就可以安装了。

    安装完毕后,输入code-push -v查看版本,如看到版本代表成功。

    2创建一个CodePush账号

    在终端输入code-push register,会打开如下注册页面让你选择授权账号。

    授权通过之后,CodePush会告诉你“access key”,复制此key到终端即可完成注册。

    然后终端输入code-push login进行登陆,登陆成功后,你的session文件将会写在/Users/用户名/.code-push.config。

    3在CodePush服务器注册app

    为了让CodePush服务器知道你的app,我们需要向它注册app: 在终端输入code-push app add

    即可完成注册

    4

    1.Android集成CodePush SDK

    下面我们通过如下步骤在Android项目中集成CodePush。

    第一步:在项目中安装react-native插件,终端进入你的项目根目录然后运行npminstall --save react-native-code-push

    第二步:在Anroid Project中安装插件。

    CodePush提供了两种方式:RNPM和Manual,本次演示所使用的是RNPM。

    运行npm

    i -g rnpm,来安装RNPM。

    第三步: 运行rnpm link react-native-code-push。这条命令将会自动帮我们在anroid文件中添加好设置。

    第四步: 如果link成功,此步骤可以忽略,查看build.gradle文件中是否有如下配置,如果没有需要在android/app/build.gradle文件里面添如下代码:

    第五步:运行code-push deployment ls

    获取 部署秘钥。默认的部署名是staging,所以 部署秘钥(deployment key) 就是staging。

    第六步: 添加配置。当APP启动时我们需要让app向CodePush咨询JS bundle的所在位置,这样CodePush就可以控制版本。更新MainApplication.java文件:

    第七步:修改versionName。

    在android/app/build.gradle中有个android.defaultConfig.versionName属性,我们需要把 应用版本改成1.0.0(默认是1.0,但是codepush需要三位数)。

    至此Code Push for Android的SDK已经集成完成。

    2.iOS集成CodePush SDK

    第一步 安装CodePush

    SDK到node_modules文件

    在终端cd到项目根目录,执行一下命令行:

    npm install --save react-native-code-push@latest安装react-native-code-push模块;

    第二步 利用cocoaPod将CodePush集成到项目

    1>.在podfile文件中输入:pod'CodePush',:path => '../node_modules/react-native-code-push'然后终端cd到ios项目根目录执行pod install

    2>打开项目在BuildPhases->Link

    Binary With Libraries中点击”+”添加libCodePush.a, libz.tbd

    第三步native代码配置

    在RN View承载controller中导入SDK:#import

    并添加如下代码

    #if DEBUG

    jsCodeLocation=[[NSBundlemainBundle] URLForResource:@"main"withExtension:@"jsbundle"];

    #else

    jsCodeLocation =[CodePush bundleURL];

    #endif

    3>为了让CodePush运行的时候知道需要更新哪些应用,打开项目的Info.plist文件添加一个新的键CodePushDeploymentKey,值就是你配置的让app连接的服务。

    查看键值的命令:code-push deployment ls您的应用名–k,终端显示如下图

    测试版填写Staging Deployment key下的键值;正式版填写Production

    Deployment key下的键值。

    三、CodePush更新

    设置更新策略

    最简单的方式是在根component中进行上述策略控制。

    1>.在js中加载CodePush模块:import

    codePush from 'react-native-code-push'

    2>.在componentDidMount中调用sync方法,后台请求更新codePush.sync()

    (1)如果可以进行更新,CodePush会在后台静默地将更新下载到本地,等待APP下一次启动的时候应用更新,以确保用户看到的是最新版本。

    (2)如果更新是强制性的,更新文件下载好之后会立即进行更新。

    (3)如果你期望更及时的获得更新,可以在每次APP从后台进入前台的时候去主动的检查更新

    生成bundle

    android项目根目录下执行:react-native bundle --platform android --devfalse --entry-file index.android.js --bundle-outputandroid/app/src/main/assets/index.android.bundle --assets-destandroid/app/src/main/res/

    ios项目根目录下执行react-native bundle

    --entry-file index.ios.js --bundle-output ./ios/main.jsbundle --platform ios

    --assets-dest ./ios --dev false生成main.jsbundle和assets文件

    当然可以将bundle文件放在其他文件目录中,不一定是assets目录。

    打包bundle结束后,就可以通过CodePush发布更新了。在终端输入

    code-push

    release <应用名称> <对应的应用版本> --deploymentName更新环境--description更新描述--mandatory是否强制更新

    本例为:

    mandatory设为true强制第一次就重新加载,mandatory设为false下次启动再加载新的bundle

    尝试几次热更新后输入命令code-push deployment history ,如下图所示,可以看到相关Label的版本、app的版本、是否为强制更新、发布的作者是谁、描述等信息。

    测试版发布成功测试没有问题后可以通过此方法将bundle发布到正式版:

    code-push promote

    当发现新版本bundle使用报错时可以使用一下命令进行回滚操作:

    code-push rollback

    四、CodePush的缺点和局限性

    (1)服务器在国外,在国内访问,网速不是很理想。

    (2)其升级服务器端程序并不开源的,后期微软会不会对其收费还是个未知数。

    (3)不支持增量更新。

    五.适用范围

    (1)适用页面账户页面、消息集合页面;

    (2)颠覆性修改页面样式,支持页面样式显示bug热更新;支持页面现有跳转逻辑bug修复;

    (3)支持添加ReactNative添加新页面,以及ReactNative现有页面与新页面见跳转,传值。

    *转载请注明出处。

    相关文章

      网友评论

          本文标题:ReactNative使用CodePush热更新文档(Andro

          本文链接:https://www.haomeiwen.com/subject/ndeczttx.html