美文网首页ReactNative
RN热更新-搭建自己服务

RN热更新-搭建自己服务

作者: 唐_亮 | 来源:发表于2019-06-19 15:02 被阅读0次

    本教程基于code-push-server搭建

    本文都是基于上面文章(搭建微软的热更新RN项目)搭建好RN环境后的操作。

    1、node项目下载并且配置。

    首先下载服务端的node项目:

    git clonehttps://github.com/lisong/code-push-server.git

    cd code-push-server

    npm install

    修改code-push-server/config/config.js配置文件

    1:配置db

    db: {

    username:"root",

     password:"123123",

     database:"codepush",

     host:"127.0.0.1",

     port:3306,

     dialect:"mysql",

     logging:false,

     operatorsAliases:false,

    },

    2:配置local

    local: {

    // Binary files storage dir, Do not use tmpdir and it's public download dir.

     storageDir:"/Users/zou/codepushWorkspace",//自定义电脑上的对应目录就可以(注意权限)。

    // Binary files download host address which Code Push Server listen to. the files storage in storageDir.

     downloadUrl:"http://192.168.38.187:3000/download",//这里ip+端口改成本地的

    // public static download spacename.

     public:'/download'

    },

    3:配置jwt 感觉我们本地项目没什么用

    jwt: {

    // Recommended: 63 random alpha-numeric characters

    // Generate using: https://www.grc.com/passwords.html code-push-server 验证登录验证方式使用的json web token加密方式,该对称加密算法是公开的,所以修改config.js中tokenSecret值很重要。

     tokenSecret:'uxXUUMMrNiLghXXGbThBdWTcxaI8e71iW6MxOMYlS0ochHCYNz22k97LB0Sl2SF'//docker文档有说明 https://github.com/lisong/code-push-server/blob/master/docker/README.md

    },

    4:配置common---这里只修改了dataDir和storageType;说明下storageType的值有很多种,比如qiniu(七牛),阿里云,腾讯云,,,在configJS里面有说明。

    common: {

    /*

    * tryLoginTimes is control login error times to avoid force attack.

    * if value is 0, no limit for login auth, it may not safe for account. when it's a number, it means you can

    * try that times today. but it need config redis server.

    */

     tryLoginTimes:0,

     // CodePush Web(https://github.com/lisong/code-push-web) login address.

    //codePushWebUrl: "http://127.0.0.1:3001/login",

    // create patch updates's number. default value is 3

     diffNums:3,

     // data dir for caclulate diff files. it's optimization.

     dataDir:"/Users/zou/codepushWorkspace/data",

     // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3"| "oss" || "tencentcloud")

     storageType:"local",

     // options value is (true | false), when it's true, it will cache updateCheck results in redis.

     updateCheckCache:false,

     // options value is (true | false), when it's true, it will cache rollout results in redis

     rolloutClientUniqueIdCache:false,

    },

    到此完成程序端的修改。

    2、接着配置数据库。

    1、下载mysqlhttps://dev.mysql.com/downloads/mysql/数据库

    安装好数据库,mac安装的时候最后一步有一个弹窗里面有默认的数据库密码,需要用户自己复制下来。否则需要找回密码(麻烦)

    一般来说借助NavicatMysql可以很好的管理mysql。Navicat Mac版本下载注意这个版本需要命令行执行:sudo spctl --master-disable;再次打开就可以使用。

    2、安装好Navicat后,点击左上角的新建mysql连接,连接名:localhost(自己定义)

    然后选择localhost,右键新建数据库,名称为,codepush;

    双击codepush变为上图一样的绿色。然后右击,选择运行SQL文件,选中我们gitclone下来的项目里面的

    再查看数据库就有对应的表格和数据了。

    最后启动数据库./bin/www 启动服务 出现如下log说明已经服务启动完成了

    到这里本地的热更新服务已经完成

    接着做RNapp端的修改。

    1.如果之前登录过微软的服务,就需要先登出:

    1、登录本地服务,进入项目根目录打开terminal。

    code-push logout;//之前有登录过别的服务需要先登出。

    code-push loginhttp://127.0.0.1:3000/

    出现如下画面

    点击登录,默认账号密码是:admin,123456,账号可以直接在数据库修改。

    登录后获取token

    复制token到命令行并输入,回车。

    2、添加要热更新的APP(记住添加的key,后面需要用到。)

    code-push app add appname android/ios react-native

    3、将添加app获取的key配置到Android/iOS的代码中(可通过命令 code-push deployment ls 您的应用名 -k 查看对应app的key)

    修改Android项目文件

    对应的key和serverUrl需要替换,serverUrl之前应该是没有传入参数,默认应该是用微软的。

    new CodePush("Gqwc75hFol80hu2u9ga7xhgyDrKL4ksvOXqog", getApplicationContext(), BuildConfig.DEBUG,"http://192.168.38.187:3000/"),

    修改ios项目的文件

    加入

    CodePushServerURL

    http://192.168.38.187:3000/

    上面的参数-CodePushDeploymentKey-为对应的key。我的项目做了debug和release的自动选择所以值是,

    <string>$(CODEPUSH_KEY)</string>,

    可以直接将key放入这里替换

    <string>clcuSttA1itBpr19vWN4Sc7oTQnF4ksvOXqog</string>

    如果要把debug和release的key都输入进去可以打开xcode进行替换。

    最后测试。

    Android打包apk

    ios可以用release的模式编译项目到手机或者模拟器,

    然后关闭app。

    接着在RN项目里面随便改个首页的东西,

    执行:

    bundle-ios/android,分别打包Android和ios的项目,ios需要在./ios下新建bundle文件夹(如果没有bundle文件夹),

    命令说明:code-push release-react <添加的APPName> android/ios --t 1.0.0(版本) --d Staging/Production --des “更新提示” -m false(是否强制更新)

    重新打开app就可以看到对应的更新提示。点击更新就好。

    ps:

    1、如果出现更新提示,点击下载或者后天更新,等待后没有看到对应的更新,有可能是,这个地址写错了,我之前写的是127.0.0.1就导致了这个问题。

    相关文章

      网友评论

        本文标题:RN热更新-搭建自己服务

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