美文网首页React Native开发
windows服务器搭建code-push-server

windows服务器搭建code-push-server

作者: tomorrow_chen | 来源:发表于2018-05-04 23:54 被阅读313次

参考网址:

http://222xiaohuan.iteye.com/blog/2347617
https://github.com/lisong/code-push-server/issues

服务器需要安装 nodegitmysql
⚠️ 另外 服务器需要开启 3000端口

步骤一: 将code-push-server下载下来,并安装依赖

   node  git clone https://github.com/lisong/code-push-server.git
   cd code-push-server
   npm i

步骤二: 初始化mysql数据库

    node ./bin/db init --dbhost localhost --dbuser root —dbpassword

步骤三: 修改 config.js 文件 , 路径在 code-push-server/config/config.js

// Config for database, only support mysql.
  db: {
    username: process.env.RDS_USERNAME || "root",
    password: process.env.RDS_PASSWORD || "123456", // 你的MySQL访问密码,如果没有就null
    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
  },
  // Config for local storage when storageType value is "local".
  local: {
    // Binary files storage dir, Do not use tmpdir and it's public download dir.
    // storageDir: process.env.STORAGE_DIR || "/Users/tablee/workspaces/storage",//需要你自己创建一个文件路径,把你的路径填上去
    storageDir: "E:/storage"  // 你的文件路径
    // Binary files download host address which Code Push Server listen to. the files storage in storageDir.
    // downloadUrl: process.env.LOCAL_DOWNLOAD_URL || "http://localhost:3000/download",  
    downloadUrl: "http://你的ip:3000/download",
    // public static download spacename.
    // public: process.env.PUBLIC || '/download'
    public:  '/download'
  },
  jwt: {
    // Recommended: 63 random alpha-numeric characters
    // Generate using: https://www.grc.com/passwords.htm
    tokenSecret: 'ItFp6KHLXMHhAHRUvjCiyNNOfimZQmT7top3iHQakrb3Q1SdEiY3nol4nijzmpL'  }, // 去 https://www.grc.com/passwords.htm 这里获取
  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://localhost:3001/login",
    // create patch updates's number. default value is 3
    diffNums: 3,
    // data dir for caclulate diff files. it's optimization.
    // dataDir: process.env.DATA_DIR || "/Users/tablee/workspaces/data",,//需要你自己创建一个文件路径,把你的路径填上去
    dataDir: "E:/storage"  // 你的文件路径
    // storageType which is your binary package files store. options value is ("local" | "qiniu" | "s3")
    storageType: process.env.STORAGE_TYPE || "local",
    // options value is (true | false), when it's true, it will cache updateCheck results in redis.
    updateCheckCache: false
  },

步骤四: 启动code-push-server

  node ./bin/www

步骤五: 安装 code-push-cli

  npm install code-push-cli@latest -g
  code-push login http://127.0.0.1:3000 #会打开浏览器    帐号:admin 密码:123456   复制得到的token 粘贴到命令行回车

步骤六: 使用code-push添加 android app

添加Android App.png

将我们得到的Production 的Deployment Key 填入你rn项目中,如下图

strings.xml MainApplication.java

步骤七:使用code-push添加 ios app

  code-push add app test-ios ios  react-native

会和步骤六一样 , 将Deployment Key 填入 info.plist 中,如下图

Info.plist

步骤八: 在你的rn项目中安装 react-native-code-push

  npm install react-native-code-push@latest --save
  react-native link react-native-code-push

⚠️ link 失败的参考 这篇文章 React Native CodePush实践小结

然后在你rn项目的入口文件中添加一下代码

import React, { Component } from 'react'
import {
  View,
} from 'react-native'
import CodePush from 'react-native-code-push'

export default class Home extends Component {
  constructor(props) {
    super(props)
  }

  ...

  codePushDownloadDidProgress(progress) {
    this.setState({ progress: progress.receivedBytes / progress.totalBytes })
  }

  codePushStatusDidChange(syncStatus) {
    switch (syncStatus) {
      case CodePush.SyncStatus.CHECKING_FOR_UPDATE:
        // this.setState({ syncMessage: "检查更新" });
        break;
      case CodePush.SyncStatus.DOWNLOADING_PACKAGE:
        // this.setState({ syncMessage: "下载安装包" });
        break;
      case CodePush.SyncStatus.AWAITING_USER_ACTION:
        // this.setState({ syncMessage: "等待用户协作" });
        break;
      case CodePush.SyncStatus.INSTALLING_UPDATE:
        // this.setState({ syncMessage: "Installing update." });
        break;
      case CodePush.SyncStatus.UP_TO_DATE:
        // this.setState({ syncMessage: "已经是最新版本了", progress: false });
        break;
      case CodePush.SyncStatus.UPDATE_IGNORED:
        // this.setState({ syncMessage: "取消更新", progress: false });
        break;
      case CodePush.SyncStatus.UPDATE_INSTALLED:
        // this.setState({ syncMessage: "更新完成", progress: false });
        break;
      case CodePush.SyncStatus.UNKNOWN_ERROR:
        // this.setState({ syncMessage: "An unknown error occurred.", progress: false });
        break;
    }
  }

  componentDidMount() {
    CodePush.sync(
      {
        installMode: CodePush.InstallMode.IMMEDIATE,
        updateDialog: {
          optionalIgnoreButtonLabel: '稍后',
          optionalInstallButtonLabel: '立即更新',
          optionalUpdateMessage: '有新版本了,是否更新?',
          title: '更新提示'
        }
      },
      this.codePushStatusDidChange.bind(this),
      this.codePushDownloadDidProgress.bind(this)
    )
  }
  ....
}

步骤九: 发布更新包

  code-push release-react test-android android -d Production  
  code-push release-react test-ios ios -d Production  

再次打开App就会看到弹框提示是否需要更新

相关文章

网友评论

  • JamesSawyer:谢谢分享,请问我这边有检测到更新,更新提示框出来了,但是点击 更新 之后, 并没有去下载任何更新包,请问这种情况是什么原因呢?
    tomorrow_chen:@D调定义之崽崽 这种问题是你有步骤错了,仔细来几遍就好了
    D调定义之崽崽:我也是,请问你解决了吗
  • IT人故事会:谢谢分享已经收藏了。

本文标题:windows服务器搭建code-push-server

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