ionic3开发集锦ionic开发我爱编程

ionic2/3-热更新(code-push)

2017-11-15  本文已影响197人  JoyoDuan

参考

安装插件

npm install -g typescript
npm install -g typings
npm install -g tslint
npm install -g code-push-cli

ps:typescript使用时的命令是tsc,而不是typescript

如图:


2017-11-15的版本信息.png

热更新代码服务端

在服务端创建应用

code-push app add moon_admin_android android cordova
code-push app add moon_admin_ios ios cordova

ps:这四个key是用来连接客户端和服务端的

code-push.png

ps:你还可以在web端查看/管理app,传送门

客户端(app、ionic2/3项目)安装插件

ionic cordova plugin add cordova-plugin-code-push
npm install --save @ionic-native/code-push
<access origin="*" />

<access origin="https://codepush.azurewebsites.net" />
<access origin="https://codepush.blob.core.windows.net" />
<access origin="https://codepushupdates.azureedge.net" />

热更新代码

import {CodePush} from "@ionic-native/code-push";

动态配置在服务端创建应用后得到的四个key

我的是Constants.ts文件

code-push key.png

代码:

/**
 * debug开发者模式
 */
export const DEBUG = {
  //是否debug模式,true:是, false:否
  IS_DEBUG: true
}

/**
 * 热更新发布的key
 */
export const CODE_PUSH_DEPLOYMENT_KEY = {
  ANDROID: {
    Production: '你的android Production key',
    Staging: '你的android Staging key'
  },
  IOS: {
    Production: '你的ios Production key',
    Staging: '你的ios Staging key'
  }
}
import { CodePush } from '@ionic-native/code-push';
import { DEBUG, CODE_PUSH_DEPLOYMENT_KEY } from './Constants';

  sync()
  {
    //如果不是真机环境return
    if (!this.isMobile()) return;
    //发布的key
    let deploymentKey = '';
    //如果是Android环境 并且是 debug模式
    if (this.isAndroid() && DEBUG.IS_DEBUG)
    {
      deploymentKey = CODE_PUSH_DEPLOYMENT_KEY.ANDROID.Staging;
    }
    if (this.isAndroid() && !DEBUG.IS_DEBUG)
    {
      deploymentKey = CODE_PUSH_DEPLOYMENT_KEY.ANDROID.Production;
    }
    if (this.isIos() && DEBUG.IS_DEBUG)
    {
      deploymentKey = CODE_PUSH_DEPLOYMENT_KEY.IOS.Staging;
    }
    if (this.isIos() && !DEBUG.IS_DEBUG)
    {
      deploymentKey = CODE_PUSH_DEPLOYMENT_KEY.IOS.Production;
    }
    //热更新同步
    this.codePush.sync({
      deploymentKey: deploymentKey
    }).subscribe((syncStatus) => {
      console.log(syncStatus);
    });
  }

  /**
   * 是否是真机环境
   * @returns {boolean}
   * @memberof NativeService
   */
  isMobile(): boolean
  {
    return this.platform.is("mobile") && !this.platform.is("mobileweb");
  }

  /**
   * 是否android真机环境
   * @returns {boolean}
   * @memberof NativeService
   */
  isAndroid(): boolean
  {
    return this.isMobile() && this.platform.is("android");
  }

  /**
   * 是否是ios真机环境
   * @returns {boolean}
   * @memberof NativeService
   */
  isIos(): boolean
  {
    return this.isMobile && (this.platform.is("ios") || this.platform.is("ipad") || this.platform.is("iphone"));
  }

发布热更新

code-push deployment list <appName>

执行命令

code-push deployment list moon_admin_android

执行结果如下图

目前我的moon_admin_android应用"Production"部署状态没有发布更新,也没有安装记录;"Staging"则有一次发布更新v1,一次安装记录

deployment list.png
code-push release-cordova <appName> <platform> [options]

执行命令

code-push release-cordova moon_admin_android android --des "测试热更新"

ps: 默认发布"Staging"部署状态,也就是开发版

执行命令结果


发布成功.png

再次执行查看发布命令

code-push deployment list moon_admin_android

执行结果

会看到"Staging"多了一个"v2"版本,但是还没有安装记录

deployment v2.png

打开app后,再执行查看发布命令
code-push deployment list moon_admin_android

手机热更新成功.png

ps: 执行查看发布命令可能存在延迟,不能立马看到安装记录改变,但实际app上已经更新了代码。如出现该现象请淡定

其他说明

<meta http-equiv="Content-Security-Policy" content="default-src https://codepush.azurewebsites.net 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *" />
<platform name="android">
    <preference name="CodePushDeploymentKey" value="YOUR-ANDROID-DEPLOYMENT-KEY" />
</platform>
<platform name="ios">
    <preference name="CodePushDeploymentKey" value="YOUR-IOS-DEPLOYMENT-KEY" />
</platform>

最后

ps: 安装新插件后,要执行cordova platform rm androidcordova platform add android

code-push常用命令

上一篇 下一篇

猜你喜欢

热点阅读