React Native基于云服务器的热更新方案

本文有较多的命令拷贝自网友Yochi的文章,特此感谢。

  1. 云服务器(阿里云或者腾讯云等)安装MySQL

    使用命令进行远程连接
    $ ssh -p 22 [email protected]
    
    参照这个链接傻瓜式安装MySQL。不过下载我用的是本地下载,然后远程传输。传输命令如下:
    scp /home/jack/A [email protected]:/home/jihao/home/jack/A是本地目录,192.168.xxx.xxx是linux服务地IP,:/home/jihao指向服务器的目录
    
    安装后进行登录,可能会出现Access denied for user ‘root’@’localhost’ (using password: YES)错误,可以参考该地址的方法二进行登录。

    登录后需要修改密码,可以参考该地址的方法一。
  2. 云服务器部署code-push-server
    $ cd 存放code-push-server文件夹
    $ git clone https://github.com/lisong/code-push-server.git
    $ cd code-push-server
    $ npm install
    
    之后可以打开./bin/db文件修改数据库的配置,按I进行修改。
    $ vim ./bin/db
    
    找到如下语句修改数据库名字、host、账号、密码,修改后按ESC退出编辑,并输入:wq保存退出。
    default({dbname: 'codepush', dbhost: 'localhost', dbuser: 'root', dbpassword: null})
    
    之后进行数据库初始化
    $ ./bin/db init --dbhost localhost --dbuser root --dbpassword xx00(刚刚刚安  装的数据库密码) 
    
    接着打开配置文件进行修改
    $ vim ./config/config.js
    
    db: {
        username: process.env.RDS_USERNAME || "root",
        password: process.env.RDS_PASSWORD || "password",
        database: process.env.DATA_BASE || "codepush",
        host: process.env.RDS_HOST || "127.0.0.1",
        port: process.env.RDS_PORT || 3306,
        dialect: "mysql",
        logging: false,
        operatorsAliases: false,
    },
    ....
    local: {
        // Binary files storage dir, Do not use tmpdir and it's public download dir.
        storageDir: process.env.STORAGE_DIR || "/usr/local/CodePushServer/tablee/workspaces/storage",
        // Binary files download host address which Code Push Server listen to. the files storage in storageDir.
        downloadUrl: process.env.LOCAL_DOWNLOAD_URL || "http://111.xxx.xxx.xxx:3000/download",
        // public static download spacename.
        public: '/download'
    },
    ...
    
    这里需要注意的是local。需要配置好storageDir所指定的目录,没有就创建个,或者是另外指定,否则启动会报找不到目录;如果是将code-push-server部署在云服务器上的话,downloadUrl需要改为公网指定的IP地址,不需要再去配置前面的tencentcloudqiniu

    启动服务
    $ ./bin/www 
    
  3. 开发设备上登录

    在开发设备上安装code-push-cli
    $ npm install code-push-cli@latest -g
    $ code-push login http://xxx.xxx.xxx.xxx:3000  #云服务器的IP,之后会弹出浏览器,输入admin/123456登录后,拷贝token,会填到终端,登录成功
    $ Enter your token from the browser:
    
    添加工程与指定环境
    $ code-push app add name ios react-native #name为工程名字
    #添加后默认会创建两个环境Staging和Production,可以通过下面命令创建新环境
    $ code-push deployment add name 环境名 
    $ code-push deployment ls name -k #查看name所有的环境及对应的Deployment Key(后续用到)
    
  4. 工程改造

    找一个RN项目或者创建一个。
    $ cd 存放项目目录(package.json文件所在目录)
    $ npm install --save react-native-code-push  #安装react-native-code-push
    $ react-native link react-native-code-push   #连接到项目中,提示输入配置可以先行忽略
    
    然后在info.plist文件中加上配置
    CodePushDeploymentKey
    Deployment Key
    CodePushServerURL
    http://公网IP:3000
    
    修改指定的js文件,引用官方的一个列子。代码中的【1】【2】【3】为修改部分
    //RNHighScores.js
    import React,{ Component } from 'react';
    import {AppRegistry, StyleSheet, Text, View} from 'react-native';
    //【1】引入react-native-code-push
    import codePush from "react-native-code-push";
    
    class RNHighScores extends React.Component {
        componentDidMount () {
            //【2】提示是否更新,deploymentKey要设置为指定环境对应的key。
            codePush.sync({
                      // updateDialog: true, // 是否打开更新提示弹窗
                      // codePush.InstallMode.ON_NEXT_RESTART是下次启动的时候
                      updateDialog: {
                      optionalIgnoreButtonLabel: '稍等',
                      optionalInstallButtonLabel: '丢后台去',
                      optionalUpdateMessage: '发现新版本,更新下呗?',
                      title: '更新提示>.<'
                      },
                      installMode: codePush.InstallMode.ON_NEXT_RESTART,
                      mandatoryInstallMode: codePush.InstallMode.ON_NEXT_RESTART,
                      deploymentKey: 'Lt11STjRihTPyRAibUvbU2fzpknb4ksvOXqog',
                      });
        },
        render() {
            var contents = this.props['scores'].map((score) => (
                                                            
                                                            {score.name}:{score.value}
                                                            {'\n'}
                                                            
                                                            ));
            return (
                
                2048 High Scores!
                {contents}
                
                );
        }
    }
    
    const styles = StyleSheet.create({
                                 container: {
                                 flex: 1,
                                 justifyContent: 'center',
                                 alignItems: 'center',
                                 backgroundColor: '#FFFFFF',
                                 },
                                 highScoresTitle: {
                                 fontSize: 20,
                                 textAlign: 'center',
                                 margin: 10,
                                 },
                                 scores: {
                                 textAlign: 'center',
                                 color: '#333333',
                                 marginBottom: 5,
                                 },
                                 });
    
    // 整体js模块的名称
    //【3】
    RNHighScores = codePush({checkFrequency: codePush.CheckFrequency.MANUAL})(RNHighScores);
    AppRegistry.registerComponent('RNHighScores', () => RNHighScores);
    
    //index.js
    import RNHighScores from './ios/XXX/RNHighScores/RNHighScores'; //指向RNHighScores.js的存放位置
    
  5. 发布更新
    $ code-push release-react name ios --deploymentName Release  #Release为指定环境,这个要跟deploymentKey相对应
    $ code-push deployment history name Release #利用该命令可以查看Release的所有版本及下载情况。
    
  6. 其他地址
    react-native-code-push命令

你可能感兴趣的:(React Native基于云服务器的热更新方案)